http к https, www к не www и уважительным URL-адресам

#.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. Приятно иметь все это в одном правиле. Я думаю, что решение состояло в том, чтобы поставить его перед любыми другими правилами. Спасибо!