Используя 'mod_rewrite', как заставить HTTPS для определенных путей и HTTP для всех других? - PullRequest
3 голосов
/ 29 ноября 2009

У меня есть приложение PHP-Apache, использующее mod_rewrite для чистых URL-адресов. У меня много проблем с получением определенных страниц и путей к HTTPS, а также с тем, что все остальные остаются в качестве HTTP.

Вот пример того, что я имею в виду:

// http://www.example.com/panel/ -> Should always redirect to HTTPS
// http://www.example.com/store/ -> Should always redirect to HTTPS

// Anything not in the above should always be HTTP
// so...
// https://www.example.com/not-in-above-rules -> Should always redirect to HTTP

Есть идеи?

Ответы [ 4 ]

10 голосов
/ 29 ноября 2009

Вы можете поместить что-то подобное в ваш: 80 vhost:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(panel/|store/payment) https://%{HTTP_HOST}%{REQUEST_URI}

А это в вашем: 443 vhost:

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule !^(panel/|store/payment) http://%{HTTP_HOST}%{REQUEST_URI}
2 голосов
/ 29 ноября 2009

Общее правило надлежащей безопасности: если некоторым вашего сайта требуется HTTPS, то всем вашего сайта требуется HTTPS. Если вы будете использовать HTTPS в разделе платежей, то ваша целевая страница также должна быть HTTPS.

0 голосов
/ 17 июня 2010

Ни одно из этих решений не работает с красивыми URL. Одно из предложений: мы получали предупреждения безопасности браузера, просто используя http_host в перезаписи. Очевидно, что Thawte является запаздывающим, и поэтому префикс «www» или нет имеет значение в отношении предполагаемой действительности сертификата. Вот несколько строк, чтобы гарантировать, что перенаправления на безопасный сайт всегда начинаются с префикса «www»:

RewriteCond %{HTTP_HOST} ^www\.mysite\.com [NC]
RewriteRule ^(login\.php|members\.php)$ https://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{HTTP_HOST} ^mysite\.com [NC]
RewriteRule ^(login\.php|members\.php)$ https://www.${HTTP_HOST}%{REQUEST_URI}

Или, чтобы сделать это немного меньше, вы можете оставить 2-ю строку и жестко закодировать домен в 4-й. Я уверен, что есть более элегантный способ сделать это, но htaccess расстраивает, и это работает.

0 голосов
/ 29 ноября 2009

сделать это:

RewriteCond %{HTTP_HOST}         ^www.example.com(:80)?$

RewriteRule ^/panel/(.*) https://www.example.com/panel/$1 [R=301,L]

то же самое для другого пути

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...