mod_rewrite www на no-www и http на https одновременно

#apache #.htaccess #mod-rewrite

#apache #.htaccess #mod-переписать

Вопрос:

В настоящее время у меня есть mod_rewrite с найденным мной кодом для перенаправления всех запросов на один и тот же URL без www.

Что я пытаюсь сделать сейчас, так это настроить Apache mod_rewrite для выполнения следующего, без каких-либо ненужных действий / дополнительных перенаправлений.

 http:// to https://

http://www. to https://
  

Я не знаком с этим, но в псевдокоде, http(s)://(www.)domain.com to https://domain.com исключительно для URL-адресов верхнего уровня, исключая поддомены.

Ответ №1:

Вам просто нужно одно правило для обоих условий:

поместите этот код в свой DOCUMENT_ROOT/.htaccess файл:

 RewriteEngine On

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www. [NC]
RewriteRule ^ https://domain.com%{REQUEST_URI} [NE,R=301,L]
  

Комментарии:

1. 1, я замечаю, что для сохранения URL-адреса, который вы %{REQUEST_URI} часто используете, с NE флагом, мне это нравится. 🙂

Ответ №2:

Да, есть способ объединить эти операции в единое правило:

 RewriteCond %{HTTP_HOST} !=example.com [OR]
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://example.com/$1
  

Ответ №3:

У меня это сработало. Я попробовал приведенный выше, но он создал цикл перенаправления в старых браузерах.

 RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] 

RewriteCond %{SERVER_PORT} ^443$ 
RewriteCond %{HTTP_HOST} !^example.com$ [NC] 
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]