#.htaccess #https #no-www
#.htaccess #https #нет-www
Вопрос:
Я хочу перенаправить http на https, а www на не www.
Случаи:
http://example.com/my/url
http://www.example.com/my/url
https://example.com/my/url
https://www.example.com/my/url
Результат
https://example.com/my/url
https://example.com/my/url
https://example.com/my/url
https://example.com/my/url
Мой текущий файл htaccess:
RewriteCond %{HTTP_HOST} ^www.(. ) [NC]
RewriteRule ^(.*) https://%1/$1 [R=301,NE,L]
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]
Проблема:
Он перенаправляет на https://example.com/index.php .
Я хочу, чтобы он уважал URL https://example.com/my/url .
Я нашел много вопросов, но я еще не нашел полного решения. Фактически, приведенный выше код htaccess был единственным, который работал достаточно хорошо из примерно 10 попыток.
Ответ №1:
Вы можете использовать это единственное правило для удаления www
и http -> https
:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www. [NC,OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www.)?(. )$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]
# rest of rules go here ....
Если у вас проблема со слишком большим количеством перенаправлений, попробуйте заменить вторую строку на:
RewriteCond %{ENV:HTTPS} !on
Важно сохранить это правило в качестве самого первого правила и очистить кэш браузера перед тестированием.
Комментарии:
1. Приятно иметь все это в одном правиле. Я думаю, что решение состояло в том, чтобы поставить его перед любыми другими правилами. Спасибо!