2010-03-01 2 views
2

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


# 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.

Любая идея? Jacek

+0

Ваш третий набор RewriteCond и RewriteRule, как вы заявили их здесь, идентичны второму. –

ответ

4

Существует ошибка с 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] 

Off тему совет: поищите 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 

Скажите мне, если это работает.

+1

Но тогда у вас не было проблем с ссылкой на не-ssl-контент (т. Е. Сценарии, изображения и т. Д.)? Я пробовал это, но тогда мои скрипты/таблицы стилей ссылаются на этих страницах SSL как не-ssl, который показывает пользователю предупреждение о небезопасном контенте. – jon

+0

+1 это работает для меня. я делаю изменения вместо 'domain.com', я пишу'% {HTTP_HOST} ' – diEcho

Смежные вопросы