Принудительно без www и https через htaccess

Я пытаюсь заставить пользователя быть перенаправленным на веб-сайт без www, и заставить https.

У меня есть это, что-то вроде работы, но не заставляет https, когда вводится http.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://site.com\.net/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Есть идеи, что я делаю не так?

4 ответа

Решение

Попробуйте это правило:

RewriteCond %{HTTP_HOST} ^(www\.)(.+) [OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)
RewriteRule ^ https://%2%{REQUEST_URI} [R=301,L]

Основываясь на комментарии Гамбо: "Соединение TLS/SSL установлено, и сертификат проверяется, прежде чем он передается в HTTP и происходит перенаправление HTTP". Я попытался (что, похоже, работает):

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.blahblah.com/$1 [R,L]

RewriteCond %{HTTP_HOST} ^www\.blahblah\.com [NC]
RewriteRule ^(.*)$ https://blahblah.com/$1 [L,R=301]

Пожалуйста, скажите мне, если что-то не так с этим подходом.

Единственный набор правил, который работает для меня, заключается в следующем

# match any URL with www and rewrite it to https without the www
    RewriteCond %{HTTP_HOST} ^(www\.)(.*) [NC]
    RewriteRule (.*) https://%2%{REQUEST_URI} [R=301,L]

# match non https and redirect to https
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Порядок имеет значение, в некоторых случаях он предотвращает третье перенаправление.

С помощью этого кода я перенаправляюсь с http и www и без www на https без www. Только обратите внимание, что место, куда вы вставляете код в htaccess, важно:

      RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Другие вопросы по тегам