将特定文件夹重定向到HTTPS和Wordpress

时间:2015-02-12 09:30:15

标签: wordpress .htaccess http redirect ssl

我知道这个问题在SO上被问了这么多次,我找到了我的帖子的所有相关答案,但我的情况有点独特,因此我无法使用给定的答案作为我的解决方案问题

我有一个网站http://www.example.com,其中有一个名为:secure的文件夹。 当用户尝试转到http://www.example.com/secure时,应将其重定向到该站点的HTTPS版本。 现在是棘手的部分 - 在安全页面上,每个SSL证书都要求只有HTTPS链接。特别是有https://www.example.com的链接 - 但是当用户点击它时,他应该被重定向到网站的HTTP版本。如上所述 - 主页面不安全。

我想我需要两个重写规则:

  1. 将尝试访问http://www.example.com/secure的所有人重定向到HTTPS协议。
  2. 重定向所有尝试访问https://www.example.com到HTTP协议的人。
  3. 根据我在这里找到的另一个问题,这就是我现在在域根目录中的.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
    

1 个答案:

答案 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]

最好在清除浏览器缓存后在新浏览器中对此进行测试。