Возникли проблемы с написанием этой составной перезаписи, содержащей следующие правила:
Требования:
НАПРИМЕР.
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}