2014-01-11 2 views
1

Я использую следующий mod_rewrite в .htaccess файл для перенаправления моего домена навсегда.htaccess mod_rewrite для https://subdomain.domain.com в https://www.subdomain.domain.com

из

https://domain.com

в

https://www.domain.com

RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

Как я должен mod_rewrite для перенаправления мой поддомен

из

https://subdomain.domain.com

в

https://www.subdomain.domain.com

Я имею в виду, как я могу перенаправить 3-й домен первого уровня от https:// до https://www. используя .htaccess mod_rewrite?

Thanks,

ответ

1

Измените свое первое правило на следующее. Это должно перенаправить браузер на правильный URL-адрес в 1 прыжке. Во втором условии мы сопоставляем www., если он находится перед URL-адресом, или ничего в первой группе захвата, и все, что осталось во второй группе захвата. Это может показаться противоречивым, но это гарантирует, что у нас не будет www. дважды перед URL-адресом, но также будет иметь возможность добавлять www. к имени хоста, если он еще не существует. RewriteRule ^ - всего лишь причудливый способ написания «Совсем все» (или: «Сопоставьте каждую строку, которая начинается», что даже имеет место для пустой строки).

RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(www\.|)(.*)$ 
RewriteRule^https://www.%2%{REQUEST_URI} [L,R=301] 

Затем вам нужно второе правило для обработки запросов, которые уже на https:

RewriteCond %{HTTP_HOST} !^www\. 
RewriteRule^https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
+0

mod_rewrite не работает. Он не может перенаправить URL-адрес и отобразить ошибку сертификата. спасибо, –

+0

Это не проблема с 'mod_rewrite', это проблема с вашим сертификатом. Более конкретно: ваш сертификат, вероятно, относится к 'sub.example.com', и вы получаете предупреждение о том, что на сайте есть недопустимый сертификат, когда вы пытаетесь использовать его для' www.sub.example.com'. – Sumurai8

+0

@anubhava все сертификаты были выданы в пользу моих доменов и поддоменов с www. префикс. Я не получаю никакой ошибки при перенаправлении моего домена 'https: // на https: //www.' using код, который я разместил в своем вопросе. проблема возникает только тогда, когда я перенаправляю свои поддомены. Есть идеи? –

1

Это единственное правило должно обрабатывать ваши основные и суб-домены, как:

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTPS}s on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE] 

Убедитесь он ставится в качестве первого правила в DocumentRoot/.htaccess

+0

mod_rewrite не работает. Он не может перенаправить URL-адрес и отобразить ошибку сертификата. спасибо, –

+0

предупреждение все равно произойдет, потому что переговоры SSL cert происходят до выполнения правил 'mod_rewrite'. – anubhava

+0

все сертификаты были выданы в пользу моих доменов и поддоменов с www. префикс. Я не получаю никаких ошибок при перенаправлении своего домена с 'https: // на https: // www.', используя код, который я разместил в моем вопросе. проблема возникает только тогда, когда я перенаправляю свои поддомены. Есть идеи? –