Я знаю, что есть много тем, касающихся моего вопроса. Я проверил их все и попробовал их, но не могу заставить это работать. Мне нужно переписать 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.
Есть идеи? Яцек
Ответ 1 · рейтинг 4 · Olivier Pons
Там ошибка с 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
Скажи мне, если это работает.