Переписать http на https на некоторых страницах, используя только .htaccess - PullRequest
2 голосов
/ 01 марта 2010

Я знаю, что есть много вопросов относительно моего вопроса. Я проверил их все и попробовал, но не могу заставить их работать. Мне нужно переписать http в https только на некоторых страницах. После посещения страниц https URL вернется к http. Это то, что я до сих пор:


# Rewrite Rules for domain.com
RewriteEngine On
RewriteBase /

#Rewrite www to domain.com
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]

#Rewrite to https
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} /secure.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]

#traffic to http://, except secure.php
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} /secure.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]

Когда я пропускаю последний набор правил (трафик на http://,, кроме secure.php), страница secure.php загружается как https и шифруется. FINE. С последним набором правил (трафик на http://, за исключением secure.php) URL перезаписывается на https, становится синим (SSL) на секунду и исчезает (без SSL), но URL остается https.

Есть идеи? Яцек

1 Ответ

4 голосов
/ 19 ноября 2011

Ошибка с 3-м набором правил. Вот решение: с 3-м набором правил: если https "включен", то если URL не содержит "/ secure", то перенаправить на http.

# Rewrite Rules for domain.com
RewriteEngine On
RewriteBase /

#Rewrite www to domain.com
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [L,R=301]

#Rewrite to https
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} /secure.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]

#traffic to http://, except secure.php
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !(/secure.php)
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L]

Не по теме советы: пожалуйста, поищите Yahoo Slow и их очень умные советы по оптимизации сайта, и вы поймете, почему всегда лучше иметь "www" раньше. Вам лучше сделать обратное для вашего правила перезаписи # 1: если нет «www», добавьте его.


Пожалуйста, попробуйте использовать директиву RewriteLog: она поможет вам отследить такие проблемы:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Скажите, работает ли он?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...