ModRewrite с HTTPS

Я использую следующие изменения мода, чтобы обеспечить не только канонические URL-адреса, но и то, что сайт отображается с использованием HTTPS:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
// It think the problem must be here --^

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

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php?
RewriteRule ^index\.php?$ https://www.rto12.ca/ [R=301,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html?
RewriteRule ^index\.html?$ https://www.rto12.ca/ [R=301,L]

Моя проблема возникает, когда вы пытаетесь перейти сюда: rto12.ca... Браузер выводит вас сюда: `https://www.rto12.ca/https://rto12.ca/'

Это первое условие/правило, вызывающее это. Мы ценим любые предложения.


person jay    schedule 07.09.2010    source источник
comment
Что вы используете для принудительного HTTPS? Я не вижу правила, которое проверяет это здесь.   -  person Tim Stone    schedule 07.09.2010
comment
Хорошо, Тим, и, возможно, в чем заключается моя проблема: RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}   -  person jay    schedule 07.09.2010


Ответы (1)


Это правило:

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

...просто перепишет запрос на https://rto12.ca/REQUEST_URI, а затем передаст его следующему правилу (ввод следующего правила, которое вы добавляете в конец запроса, будет https://rto12.ca/REQUEST_URI). Однако, чтобы он работал правильно, вам нужно немедленно перенаправить его:

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Вероятно, можно объединить все ваши правила максимум в одно перенаправление, поэтому позвольте мне немного поиграть с этим, и я посмотрю, что я могу придумать, а затем обновлю ответ. Однако добавление флагов должно решить вашу проблему в любом случае.

Редактировать: я думаю, что все должно быть сделано за один раз:

RewriteEngine On

RewriteCond %{HTTPS}        =off   [OR]
RewriteCond %{HTTP_HOST}   !^www\. [OR]
RewriteCond %{THE_REQUEST}  ^[A-Z]{3,9}\ /index\.(html|php)
RewriteCond %{HTTP_HOST}    ^(www\.)?(.+)$
RewriteRule ^(index\.(html|php))|(.*)$ https://www.%2/$3 [R=301,L]
person Tim Stone    schedule 07.09.2010
comment
Это определенно сделало это, Тим, спасибо! Если вы придумаете единую переадресацию, чтобы делать то, что я делаю здесь, я бы хотел на это посмотреть. Спасибо еще раз. - person jay; 07.09.2010
comment
@jeerose - Круто, рад, что это работает. Я обновил ответ комбинированным блоком перенаправления, посмотрите, позаботится ли он обо всем, что вы хотели. - person Tim Stone; 07.09.2010
comment
Это действительно так. Большое спасибо за ваше время, Тим. - person jay; 07.09.2010