我是使用.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]
答案 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)。可能的原因:
RewriteEngine on
启用了重写引擎? (见:http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteengine)AllowOverride FileInfo
或AllowOverride ALL
,以便.htaccess文件中可以接受RewriteEngine on
吗?