Как включить https только на определенных страницах с htaccess? - PullRequest
6 голосов
/ 19 апреля 2011

У меня есть сайт электронной коммерции, и я хочу включить https только в разделе электронной коммерции сайта, расположенном по адресу https://mysite.com/buy

Поскольку все ссылки на моих страницах являются относительными, когда кто-то посещает http://mysite.com и нажимает кнопку «Купить», они переходят на http://mysite.com/buy

Кроме того, если они посещают https://mysite.com/buy и нажимают на ссылку на другую страницу, они переходят на https://mysite.com.

Причина, по которой я хочу использовать https только в этом разделе, заключается в том, что у меня есть внешние элементы (например, Google Maps, Youtube, Twitter и т. Д.), Которые невозможно отправить по https.

Есть ли способhtaccess, что я могу сделать каталог / buy форсировать https, но любая другая страница заставляет http?

Редактировать: Если кто-то заинтересовался, я смог решить это с помощью PHP.Я бы все же предпочел решение htaccess, но пока оно будет работать:

if($_SERVER['HTTPS'] == "on") {
    if(strpos($_SERVER['REQUEST_URI'],"buy") === false) {
        Header("Location: http://$_SERVER['HTTP_HOST']."".$_SERVER['REQUEST_URI']");
    }
}

Ответы [ 3 ]

6 голосов
/ 19 апреля 2011

Попробуйте это в своем файле .htaccess:

Options +FollowSymLinks
RewriteEngine on

# redirect for http /buy page
RewriteCond %{SERVER_PORT} =80
RewriteRule ^buy/?$ https://mysite.com/buy [R=301,QSA,L,NE]

# redirect for https non /buy pages
RewriteCond %{SERVER_PORT} =443
RewriteCond %{REQUEST_URI} !^/buy [NC]
RewriteRule ^/?(.*)$ http://mysite.com/$1 [R=301,QSA,L,NE]

R=301 будет перенаправлять со статусом https 301
L сделает последнее правило
NE не для экранирующей строки запроса
QSA добавит существующие параметры запроса
NC для игнорирования сравнения регистра

$1 ваш REQUEST_URI

0 голосов
/ 15 мая 2013

Если ваша веб-страница размещена на порту 9001, просто включите любой порт на вашем linux box и внесите эти изменения в /etc/httpd/conf.d/ssl.conf. Затем установите для вашего порта прослушивания значение 9002, создайте SSL-сертификат и ключ и установите следующую конфигурацию в вашем httpd.conf файле

Listen 9001
<VirtualHost *:9001>
ServerAdmin root@localhost
DocumentRoot /mnt/work/httpd
<Directory "/mnt/work/httpd">
Options FollowSymLinks
 AllowOverride AuthConfig
</Directory>
  SSLEngine On
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSLCertificateKeyFile /etc/httpd/www.test.example.com.key
SSLCertificateFile /etc/httpd/www.test.example.com.crt
RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.test.example.com:9002%{REQUEST_URI}  

и ваш файл .htaccess должен выглядеть следующим образом

AuthType Digest
AuthName "Protected"
AuthDigestProvider file
AuthGroupFile /dev/null
AuthUserFile /mnt/work/httpd/digest_auth
Require user username**                     
0 голосов
/ 19 апреля 2011

У меня нет опыта, но из того, что я вижу, похоже, что файл конфигурации htaccess должен влиять только на файлы в папке, в которой он хранится.

Так что вы должны быть в состоянии сделать что-то вроде этого:

http://www.besthostratings.com/articles/force-ssl-htaccess.html

И поместите его в папку / buy вашего сайта.

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