2009-03-17 2 views
2

У меня есть сайт, который использует относительные пути для всех URL-адресов. Я просто добавил корзину покупок, чтобы две или три страницы проверки использовали HTTPS вместо HTTP. Моя проблема заключается в том, что пользователь находится в середине пути через проверку и нажимает ссылку на навигацию или что-то похожее на эту страницу с HTTPS, когда это страница, которая этого не требует (и в некоторых случаях она не может обрабатывать это из-за внешних файлов, например, GoogleMaps.js)Как использовать htaccess для перевода с https на http

ответ

3

На самом деле удивил себя и взломал что-то вместе. Перенаправляет все, что не www.domain.com/checkout

RewriteCond %{HTTPS} on 
RewriteCond %{REQUEST_URI} !^(/checkout) 
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
2

вы можете попробовать сделать что-то вроде

RewriteCond %{SERVER_PORT} !^(80|8080)$ 
RewriteCond %{REQUEST_URI} !^(checkout|order|etc)$ 
RewriteRule ^(.*)$   http://yoururl$1 

Я не уверен, если это работает, потому что я не проверял, но вы можете использовать ideea из тестирование для {SERVER_PORT}. Надеюсь, это поможет

+0

Вы ответили это, пока я печатал свой ответ. Мне нравится твоя лучше! –

+0

это почти то же самое. Фактически, используя% {HTTP_HOST}% {REQUEST_URI}, как и вы, было более элегантно :) – andi

+0

Лучше не полагаться на номера портов. Проверьте, включен ли HTTPS (или выключен, если вы хотите включить его). – Scott

0

Вам не нужно дополнительно RewriteCond директиву, чтобы исключить /checkout/…:

RewriteCond %{HTTPS} on 
RewriteRule !^checkout(/|$) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]