使用.htaccess从安全连接更改为非安全连接

时间:2011-10-13 01:56:50

标签: apache .htaccess

我是使用.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 :(得分:0)

我真的很惊讶你的第一条规则有效,因为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]

最后,我相信你的问题是你很困惑,第一条规则也没有用(我实际测试http://beta.runtimeriot.com/contact.html并且它没有交换到https)。可能的原因: