htaccess重写强制https适用于网站的某些部分,但不适用于其他部分

时间:2013-07-16 15:42:06

标签: .htaccess mod-rewrite

我正在尝试在网站的某些网页和子目录上强制使用https,但它只适用于子目录,而不适用于网页。

这是我目前的htaccess文件:

Options +FollowSymLinks

RewriteEngine On
RewriteCond %{HTTPS}  off
RewriteRule ^/?admin/ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L,QSA]
RewriteRule ^/checkout.php https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L,QSA]

第一次重写有效,但第二次没有。因此,如果我导航到www.domain.com/admin/,它将重定向到https://domain.com/admin/,但如果我导航到www.domain.com/en/checkout.php,则不会重定向到https版本。这是为什么?我记得只使用不同的页面而不是checkout.php使用相同的确切代码,然后就可以了。我无法在该页面上测试它,因为我不再拥有它,但我实际上是复制粘贴重写规则并更改了页面的名称。

1 个答案:

答案 0 :(得分:0)

<强> The first rewrite works, but the second one doesn't.

是的,不会因为这些原因:

  1. RewriteCond仅适用于即时RewriteRule
  2. RewriteRule与.htaccess中的前导/不匹配(您在第1条规则中可选)
  3. 也可以使用OR组合这两个规则。有了这些建议,请用以下代码替换您的代码:

    RewriteCond %{HTTPS} off
    RewriteRule ^/?(admin/|en/checkout\.php) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]