перенаправление некоторых, но не всех доменов на https - PullRequest
1 голос
/ 22 января 2011

Я пытаюсь убедить переписать мод для перенаправления http://example.com на https://example.com, но не для перенаправления http://subdomain.example.com

Я добавил следующее в файл .htaccess в корне сайтов,

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

и это (как я и думал) перенаправляет все, поэтому я попытался

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^http://example(.*)$ https://%{HTTP_HOST}%{REQUEST_URI}

но это также, кажется, перенаправить все?

1 Ответ

1 голос
/ 22 января 2011

RewriteRule соответствует только части URL-адреса после хоста и порта (в контексте VirtualHost) или по относительному пути файловой системы (в контексте Directory / htaccess);поэтому попытка сопоставить имя хоста в RewriteRule не будет работать.

Однако %{HTTP:Host} даст вам заголовок Host HTTP, так что RewriteCond может сопоставить его с:Недостатком является то, что mod_rewrite заметит, что вы перезаписываете в зависимости от заголовка HTTP, и добавит заголовок Vary: Host.Если вы не хотите этого, вы можете сначала сохранить его в переменной и выполнить RewriteCond для этой переменной:

RewriteRule . - [E=HTTP_HOST_NO_VARY:%{HTTP:Host}]

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{ENV:HTTP_HOST_NO_VARY} =example.com
RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R]
...