.htaccess - как перенаправить ДВУ?
В настоящее время я использую свой .htaccess для принудительного преобразования всех HTTP-запросов в HTTPS, и это работает очень хорошо. Однако я также хотел бы перенаправить некоторые ДВУ. Например -
http(s)://(www.)example.info
-> https://example.com
или https://www.example.com
http(s)://(www.)example.net
-> https://example.com
или https://www.example.com
Мой текущий файл .htaccess
содержит:
RewriteOptions inherit
RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Входящие запросы, которые я хотел бы перенаправить, могут быть или не быть HTTPS, и "www" может присутствовать или отсутствовать.
Еще одна вещь, которую я хотел бы что делать, и извините, если это должно быть в отдельном вопросе, но я считаю, что ответы будут связаны....
Могу ли я обернуть ранее описанные перенаправления в условное условие, которое пропустит их, если сервер localhost
?
1 answers
http(s)://(www.)example.info
->https://example.com
илиhttps://www.example.com
При прочтении вашего вопроса не похоже, что вы хотите канонизировать поддомен www? Тем не менее, вы должны быть. Решите, должно ли это быть www.example.com
или example.com
, и придерживайтесь этого. Для остальной части этого ответа я предположу, что www.example.com
должен быть каноническим доменом.
Проще всего было бы сказать... если запрос не относится к каноническому домену, то перенаправьте его в канонический домен. Это позволит затем поймать любой из другие ДВУ и являются ли они www или нет (и даже являются ли они FQ или нет).
Например:
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !=www.example.com
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
Примечания по поводу вышесказанного:
- Добавление флага
OR
при первом условии. Таким образом, любое из первых двух условий должно быть успешным (а не только оба из них). - Префикс
=
определяет лексикографическое точное сравнение строк. т. е. не регулярное выражение. Поэтому нет необходимости избегать буквальных точек или использовать начало/конец строки якоря. - Удаление круглых скобок на
RewriteRule
шаблон. Нет необходимости что-либо захватывать, так как вы этим не пользуетесь. - Добавлены флаги на
RewriteRule
. В конечном счете это должно быть постоянное перенаправление 301, хотя предпочтительнее сначала протестировать временное перенаправление 302 (чтобы избежать кэширования). Если вы когда-нибудь добавите больше директив, вам понадобится флагL
, чтобы остановить дальнейшую обработку. - Добавьте обратно два дополнения cPanel, если хотите (обязательно для АВТОМАТИЧЕСКОГО продления SSL). Или они могут быть разделены на свои собственные правила.
Могу ли я обернуть ранее описанные перенаправления в условное условие, которое пропустит их, если сервер
localhost
?
Существует довольно много способов заблокировать директивы из локальной разработки (которые могут зависеть от конфигурации/версии вашего сервера). Если вы просто хотите заблокировать применение этого единственного правила mod_rewrite к хосту localhost
, просто добавьте другое условие:
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !=www.example.com
RewriteCond %{HTTP_HOST} !=localhost
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
Т.е. Только когда заголовок Host
не "локальный хост".
Краткое описание
Итак, вкратце, добавив обратно условия cPanel (для АВТОМАТИЧЕСКОГО продления SSL), мы имеем:
RewriteOptions inherit
RewriteEngine on
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !=www.example.com
RewriteCond %{HTTP_HOST} !=localhost
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule .* https://www.example.com%{REQUEST_URI} [R=301,L]
Однако также обратите внимание на комментарий @xsrf, если вы планируете реализовать HSTS.
Смотрите также мой ответ на следующий вопрос о сервере по умолчанию для получения дополнительной информации об этих дополнительных директивах (АВТОМАТИЧЕСКОЕ обновление SSL), добавленных cPanel:
https://serverfault.com/questions/884915/apache-htaccess-multiple-rewrite-conditions-for-multiple-rules