Перейдите с безопасного соединения на незащищенное, используя .htaccess. - PullRequest
1 голос
/ 13 октября 2011

Я новичок в использовании .htaccess, и я довольно много искал в сети, пробовал бесчисленное множество "решений" моей проблемы, но ни один из них не помог.

Вот что мне нужно: Я хочу, чтобы моя страница contact.html загружалась с использованием безопасного соединения (и, таким образом, при отправке формы все учетные данные будут надежно зашифрованы и т. Д.). Я сделал это с помощью .htaccess без проблем, используя код, подобный:

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^contact\.html$
RewriteRule ^(.*)$ https://beta.runtimeriot.com/contact/$1 [R=301,L]

Поэтому, когда пользователь переходит на эту страницу contact.html, используется безопасное соединение. Это работает просто отлично. Я хочу использовать безопасное соединение для загрузки ТОЛЬКО этой страницы и, конечно, для отправки информации о пользователях в зашифрованном виде на сервер. Однако после того, как установлено безопасное соединение для извлечения файла contact.html, все остальные файлы с этого момента загружаются через защищенное соединение. Например, я перехожу на страницу контактов, затем перехожу (нажимаю на ссылку) оттуда на страницу about.html, безопасное соединение все еще используется. Я перепробовал множество разных предложений по изменению протоколов с https на http, например:

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

Но ни один из них не работает. Я не до конца понимаю все возможности (и ограничения) использования .htaccess, поэтому кто-то может сказать мне, можно ли добиться того, к чему я стремлюсь, с помощью .htaccess, или мне нужно искать альтернативы?

Спасибо за любую помощь!

ОБНОВЛЕНИЕ 1

Вот весь код моего корневого файла .htaccess. ПРИМЕЧАНИЕ: я изменил код со времени моего предыдущего поста

RewriteEngine On
Options FollowSymLinks

RewriteCond %{REQUEST_URI} !^/contact/contact\.html$
RewriteCond %{HTTPS} on
RewriteRule ^(.*) http://beta.runtimeriot.com/$1 [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule ^(/contact/contact\.html)$ https://beta.runtimeriot.com/$1 [R=301,L]

1 Ответ

0 голосов
/ 13 октября 2011

Я действительно удивлен, что ваше первое правило работает, так как переменная REQUEST_URI обычно содержит ведущий /, поэтому ваше правило должно быть:

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/contact\.html$
RewriteRule ^(.*)$ https://beta.runtimeriot.com/contact/$1 [R=301,L]

хотя я думаю, вы на самом деле имеете в виду:

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/contact/contact\.html$
RewriteRule ^(.*)$ https://beta.runtimeriot.com/contact/$1 [R=301,L]

или, для простоты:

RewriteCond %{HTTPS} off
RewriteRule ^/contact/contact\.html https://beta.runtimeriot.com/$1 [R=301,L]

Ваше второе правило выглядит функциональным, но оно, вероятно, создаст цикл infinte, так как ему соответствует /contact/contact.html. Должно быть:

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

Наконец, я считаю, что ваша проблема в том, что вы запутались, и 1-е правило тоже не работает (на самом деле я протестировал http://beta.runtimeriot.com/contact.html, и он не переключился на https). Возможные причины:

  • Вы включили механизм перезаписи с RewriteEngine on? (см .: http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteengine)
  • Содержит ли серверная конфигурация Apache AllowOverride FileInfo или AllowOverride ALL, так что RewriteEngine on будет приемлемым в файлах .htaccess?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...