.htaccess к WWW И/Или HTTPS


На своем сайте я хочу сделать следующие перенаправления:

  • http[s]://example.com => https://www.example.com
  • https://www.example.com => No Redirect
  • http://sub.example.com => https://sub.example.com
  • http[s]://www.sub.example.com => https://sub.example.com

Я перепробовал много методов, но все они перенаправили http://sub.example.com на https://www.sub.example.com. Что затем приведет к "DNS не найден" Или перенаправит на поиск по внезапной ссылке.

Author: MrWhite, 2017-03-10

1 answers

Все они перенаправлены http://sub.example.com К https://www.sub.example.com

Это, по-видимому, предполагает, что у вас есть правило, которое просто проверяет отсутствие www (что верно для первого правила, но противоречит второму), а затем добавляет префикс к запрошенному хосту .

Я предполагаю, что вы также хотите перенаправить http://example.com/<something> на https://www.example.com/<something> и т.д.?

Попробуйте выполнить следующее в верхней части вашего файла .htaccess:

RewriteEngine On

# www.example.com
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{HTTP_HOST} !(www\.)?sub\.example\.com
RewriteRule (.*) https://www.example.com/$1 [R=301,L]

Это в основном гласит... для всех запросы, которые являются HTTP (т. е. не HTTPS) ИЛИ предназначены для example.com И не предназначены для sub.example.com (или www.sub.example.com), а затем перенаправляют на https://www.example.com/....

Затем добавьте аналогичный блок правил для канонизации поддомена:

# sub.example.com
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^www\.sub\.example\.com [NC]
RewriteCond %{HTTP_HOST} !(www\.)?example\.com
RewriteRule (.*) https://sub.example.com/$1 [R=301,L]

Убедитесь, что вы очистили кэш браузера перед тестированием, так как ваши предыдущие (ошибочные) перенаправления 301 будут кэшированы. (По этой причине часто бывает проще тестировать с 302s.)

ОБНОВЛЕНИЕ: могу ли я сделать подстановочный знак на поддомен?

Поддомен из 1 или более символов...

# www.example.com (wildcard subdomain)
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{HTTP_HOST} !(www\.)?[a-z0-9-]+\.example\.com
RewriteRule (.*) https://www.example.com/$1 [R=301,L]

# <any-subdomain>.example.com
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} ^www\.[a-z0-9-]+\.example\.com [NC]
RewriteCond %{HTTP_HOST} !(www\.)?example\.com
RewriteCond %{HTTP_HOST} ^(?:www\.)?([a-z0-9-]+)\.example\.com [NC]
RewriteRule (.*) https://%1.example.com/$1 [R=301,L]

Дополнительная директива RewriteCond для блока поддомена требуется для захвата поддомена, чтобы мы могли использовать это в RewriteRule замена (%1 обратная ссылка). (?:www\.)? часть шаблона является группой без захвата, которая делает www поддомен необязательным, так как нам нужно иметь возможность перенаправлять sub.example.com (HTTP) или www.sub.example.com (HTTP или HTTPS).

%1 обратная ссылка в RewriteRule подстановка соответствует первой захваченной группе в последнем сопоставленном условном шаблоне.

 5
Author: MrWhite, 2017-03-11 12:29:03