Перенаправить все http / www в https://www

#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 цепочки.
Я надеюсь, что это поможет некоторым разработчикам !.