Переписать http на https на некоторых страницах только с помощью .htaccess

Я знаю, что есть много тем, касающихся моего вопроса. Я проверил их все и попробовал их, но не могу заставить это работать. Мне нужно переписать 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 и шифруется. ОТЛИЧНО. С последним набором правил (трафик на http://, кроме secure.php) URL-адрес переписывается на https, становится синим (SSL) на секунду и исчезает (без SSL), но URL-адрес по-прежнему https.

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


person user282094    schedule 01.03.2010    source источник
comment
Ваш 3-й набор RewriteCond и RewriteRule, как вы их указали здесь, идентичен 2-му.   -  person Andrew Schulman    schedule 19.11.2011


Ответы (1)


Там ошибка с 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

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

person Olivier Pons    schedule 19.11.2011
comment
Но разве у вас не было проблем со ссылками на не-SSL-контент (например, скрипты, изображения и т. д.)? Я попробовал это, но затем мои сценарии/таблицы стилей упоминаются на этих страницах SSL как не-ssl, что показывает пользователю предупреждающее сообщение о небезопасном содержимом. - person jon; 19.11.2011
comment
+1 это работает для меня. вношу изменение вместо domain.com пишу %{HTTP_HOST} - person diEcho; 06.09.2012