Как переключаться между http и https в .htaccess? - PullRequest
1 голос
/ 17 февраля 2010

Я знаю, что этот вопрос задавали несколькими различными способами, и я просмотрел / попробовал многие из предложений, но нигде не получил.

У меня есть сайт, который смешивает http и https, где все / клиент и/ cart, включая любые подкаталоги, - это https, а остальные - http.У меня проблема с тем, что он на самом деле идет в https, кажется, что он переходит в https и обратно в http с этим.

RewriteEngine On

#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule (.*) /public.php?debug=%{SERVER_NAME} [NS,QSA,L]

# Redirect to HTTPS if /cart or /customer
RewriteCond %{REQUEST_URI} ^/cart.*
RewriteCond %{REQUEST_URI} ^/customer.*
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R]

# go back to regular http if not in secure area
RewriteCond %{REQUEST_URI} !^/cart.*
RewriteCond %{REQUEST_URI} !^/customer.*
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R]

#simulate the static pages
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /public.php?controller=index&action=index [L]

#Main rewrite for application/controller/action decode logic

#RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !/scripts/
RewriteCond %{REQUEST_FILENAME} !/images/
RewriteCond %{REQUEST_FILENAME} !/css/
RewriteRule ^([a-z]+)\/([a-z]+)$ /public.php?controller=$1&action=$2 [QSA,L]
RewriteRule ^([a-z]+)\/$ /public.php?controller=$1 [QSA,L]
RewriteRule ^([a-z]+)\/([a-z]+)$ /$1/$2/ [QSA,L,R]
RewriteRule ^([a-z]+)$ /$1/ [QSA,L,R]

AddHandler php5-script .php

Может быть, кто-то может исправить меня в этом.

ТИА

Ответы [ 2 ]

0 голосов
/ 19 февраля 2010

Вы можете посмотреть на этот вопрос для аналогичного вопроса htaccess (https to http)

Даже если вы заставите это работать, ваша страница будет зашифрована, и браузер покажет красную метку в строке состояния. Вам также необходимо использовать http referrer в этих условиях.

0 голосов
/ 18 февраля 2010

Я думаю, что ваша проблема в том, что правила RewriteCond группируются как «И», а не «ИЛИ», поэтому путь должен совпадать с «корзиной» и «покупателем» для применения rewriterule (что не будет имеет смысл). Попробуйте это ..

# redirect non-https requests for /cart or /customer to https
RewriteCond %{HTTPS} off
RewriteRule ^(cart|customer) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

# redirect all other https requests to http
RewriteCond %{HTTPS} on
RewriteCond $1 !^(cart|customer)
RewriteRule ^(.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...