我知道这个问题在SO上被问了这么多次,我找到了我的帖子的所有相关答案,但我的情况有点独特,因此我无法使用给定的答案作为我的解决方案问题
我有一个网站http://www.example.com,其中有一个名为:secure的文件夹。 当用户尝试转到http://www.example.com/secure时,应将其重定向到该站点的HTTPS版本。 现在是棘手的部分 - 在安全页面上,每个SSL证书都要求只有HTTPS链接。特别是有https://www.example.com的链接 - 但是当用户点击它时,他应该被重定向到网站的HTTP版本。如上所述 - 主页面不安全。
我想我需要两个重写规则:
根据我在这里找到的另一个问题,这就是我现在在域根目录中的.htaccess。
RewriteEngine On
RewriteBase /
# Turn SSL on for /secure
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/secure
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
# Turn SSL off everything but /secure
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/secure
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
这适用于将安全页面重定向到HTTPS,但我无法弄清楚为什么它不会将https://www.example.com重定向到HTTP。
另外值得一提的是,我在同一个.htaccess中有以下代码,我无法删除。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
答案 0 :(得分:1)
根据THE_REQUEST
变量而不是REQUEST_URI
来尝试您的规则。 THE_REQUEST
变量表示Apache从您的浏览器收到的原始请求,在执行某些重写规则后不会被覆盖,与REQUEST_URI
变量不同。
RewriteEngine On
RewriteBase /
# Turn SSL on for /secure
RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} /secure [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
# Turn SSL off everything but /secure
RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} !/secure [NC]
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]
最好在清除浏览器缓存后在新浏览器中对此进行测试。