#regex #apache #.htaccess #mod-rewrite
#регулярное выражение #apache #.htaccess #мод-перезапись
Вопрос:
У меня есть этот код:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
Что это делает, так это:
- С
http://example.com
он перенаправляет наhttps://www.example.com
(это правильно) - С
https://example.com
он перенаправляет наhttps://www.example.com
(это правильно) - Но с
http://www.example.com
это не перенаправляет наhttps://www.example.com
.
Пожалуйста, обратите внимание, что это должно быть не более 1 цепочки. Он должен перенаправлять на https://www.example.com
.
Ответ №1:
Вы можете избежать жесткого кодирования имени вашего хоста и выполнить оба условия в одном правиле перенаправления следующим образом:
RewriteCond %{HTTP_HOST} !^www. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www.)?(. )$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]
Ответ №2:
Хорошо, я только что исправил это.
это обновленный код
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
Я могу гарантировать, что все это будет выполнять 301 перенаправление без более чем 1 цепочки.
Я надеюсь, что это поможет некоторым разработчикам !.