Я хочу иметь 4 условных mod_rewrite.
http to https
http://example.com to https://example.com
www. to non-www.
https://www.example.com to https://example.com
non-plural ending to plural ending domain
https://www.example.com to https://examples.com
.com (or that is not .co) domain extension to .co
https://www.example.com to https://examples.co
У меня пока есть этот код:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.co%{REQUEST_URI} [L,NE,R=301]
Мне не удается найти пример для внесения изменений пример к Примеры и .com (или другим лицам, не являющимся членами компании) .co.
Могу ли я добавить к приведенному выше коду или мне также нужно создать еще один RewriteRule?
Обратите внимание: я хочу сохранить все поддомены (кроме www.). Также, если кто-то пишет www.subdomain.example.com, я хочу сохранить поддомен, но удалить ведущий www. и измените example.com на examples.co.
Ваше дополнительное "примечание" в конце относительно поддоменов действительно является главной сложностью здесь.
Итак, канонический домен examples.co
. Любой запрос на что-либо, кроме канонического домена, должен быть перенаправлен на канонический домен.
Попробуйте следующее:
RewriteEngine On
# Redirect HTTP to HTTPS and remove any www subdomain and trailing dot (FQDN)
# NB: Potentially includes a subdomain
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+?)\.?$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=302]
# Canonicalise the hostname "examples.co" and retain an optional subdomain
# NB: The www (sub)subdomain has already been removed.
# Potentially includes a subdomain.
RewriteCond %{HTTP_HOST} !examples\.co$
RewriteCond %{HTTP_HOST} ^([^.]+\.)?examples?\. [NC]
RewriteRule ^ https://%1examples.co%{REQUEST_URI} [L,NE,R=302]
Первое правило в первую очередь удаляет необязательный субдомен www (или субдомен). В %1
обратная ссылка содержит имя хоста за вычетом поддомена www (если есть) и за вычетом любой конечной точки (FQDN) - как зафиксировано CondPattern ^(?:www\.)?(.+?)\.?$
.
Второе правило канонизирует доменное имя. Любой необязательный субдомен фиксируется (в %1
обратная ссылка), и все после этого игнорируется. Мы уже знаем, что запрошенное имя хоста не заканчивается на examples.co
(первым состояние).
Это приведет к максимум 2 перенаправлениям. Второе перенаправление происходит, когда запрашивается неканонический домен.
Например:
http://www.examples.co/foo
=> https://examples.co/foo
.http://www.example.com/foo
=> https://example.com/foo
=> https://examples.co/foo
.http://www.subdomain.example.com/
=> https://subdomain.example.com/
=> https://subdomain.examples.co/
.Протестируйте с 302 (временными) перенаправлениями, чтобы избежать проблем с кешированием. Переходите на 301 только тогда, когда убедитесь, что он работает нормально. Перед тестированием вам необходимо очистить кеш браузера.
Это предполагает, что вы не реализуете HSTS. Если да, то вам нужно сначала перенаправить HTTP на HTTPS на том же хосте.
Обратите внимание, если вы используете стандартные подстановочный знак поддомены (как предложено в вашем другой вопрос) затем запрос на https://www.<subdomain>.<domain>
скорее всего будет остановлен браузером (и, следовательно, перенаправление не произойдет), поскольку сертификат SSL будет недействительным.