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,

Другие вопросы по тегам