2009-04-07 2 views
1

Я пытаюсь использовать mod_rewrite от apache2 для принудительного подключения SSL к веб-сайту. До сих пор она работает отлично со следующим в <VirtualHost> записи сайта:Принудительное перенаправление на SSL для всех страниц, кроме одного

RewriteEngine On 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,NC,R,L] 

Это работает хорошо, и перенаправляет все, что является то, что я хотел.

Однако на сайте есть одна конкретная страница, в которой используется API карт Google, который недоступен через SSL и, следовательно, запускает предупреждения о смешанном содержании в браузере. Итак, мне бы хотелось, чтобы эта страница, предназначенная только для карт, не перенаправлялась и использовала обычное, не-ssl-соединение.

URL-адрес, по которому я не хочу использовать SSL, имеет форму /thing/add/{ID}/page3, где {ID} - числовое значение.

Возможно ли это?

ответ

2
RewriteEngine On 

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^thing/add/\d+/page3$ - [L] 

RewriteCond %{SERVER_PORT} ^443$ 
RewriteRule ^(thing/add/\d+/page3) $ http://%{HTTP_HOST}/$1 [QSA,NC,R,L] 

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,NC,R,L] 

Правила обрабатываются сверху донизу; первая прекращает переписывать страницу карт, если не на SSL; второй (необязательно) перенаправляет эти страницы в незащищенные при доступе через SSL; для всех остальных применяется старое правило.

+0

Работает отлично. Спасибо :) –

+0

Добро пожаловать. Вы можете попробовать% {HTTPS} ^. + $ Вместо регулярного выражения% {SERVER_PORT} (так как% {HTTPS} должно быть «включено», если на SSL не указано иначе, тогда вы будете независимы от номера порта) но у меня были проблемы с этим. – Piskvor

Смежные вопросы