Назад | Перейти на главную страницу

Необходимо перенаправить все не www на www и все https на субдомен

Возникли проблемы с написанием этой составной перезаписи, содержащей следующие правила:

Требования:

НАПРИМЕР.

http://example.com/checkout/123 -> https://wwws.example.com/checkout/123 или http://example.com/checkout ->https://wwws.example.com/checkout/123

Что я сейчас сделал:

В настоящее время у меня есть серия перезаписей, которые заменяют не-www на www:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Это проблематично, потому что, когда http-запрос для URI: http://wwws.example.com он перенаправляет это на http://www.wwws.example.com.

Как мне добиться перезаписи, удовлетворяющей моим требованиям?

Не используйте HTTP_HOST:

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

Я предпочитаю это:

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

Или намного проще:

<VirtualHost *:80>  
ServerAlias example.com  
RedirectMatch permanent ^/(.*) http://www.example.com/$1  
</VirtualHost>

Прочтите упражнение: найдите другие способы.

Чтобы перенаправить https на http:

RewriteCond %{SERVER_PORT} !^80$  
RewriteRule ^/(.*) http://%{SERVER_NAME}/$1 [L,R]

Или:

RewriteCond %{HTTP} off  
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}