Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: user282094Ответов: 1

Я знаю, что есть много тем, касающихся моего вопроса. Я проверил их все и попробовал их, но не могу заставить это работать. Мне нужно переписать 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.

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

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

sslhttpsmod-rewrite

Ответы

Ответ 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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы