Apache: перенаправить все запросы на https://www.domain.tld
Я не могу найти рабочее решение для меня.
Вот мои настройки:
# Redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
# Redirect http to https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Каждая часть работает очень хорошо, но не вместе. Часть для перенаправления https всегда перенаправляет на https://domain.tld/ поэтому без www, игнорируется. Кто-нибудь знает решение?
Заранее спасибо.
1 ответ
Форсирование HTTPS
и включать WWW
:
RewriteEngine On
RewriteCond %{HTTP_HOST}#%{HTTPS}s !^www\.([^#]+)#(?:off|on(s)) [NC]
RewriteRule ^$ http%2://www.%1%{REQUEST_URI} [R=301,L]
Нужно сделать оба в одном кадре, иначе вы можете разделить правила и, вероятно, так:
# Rewrite to WWW
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*) https://www.%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
# Rewrite HTTP to HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
Если перезапись не работает для non-www
в www
тогда есть вероятность перенаправления VirtualHost 301 где-то еще (вероятно, в httpd.conf
), который установлен на сервере... Это будет выглядеть примерно так:
httpd.conf
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com$1 [L,R=301]
</IfModule>
Если это установлено в httpd.conf
это может переопределить переписать в .htaccess
за non-www
в www
,