Apache .htaccess将https重定向到http,反之亦然

时间:2012-01-30 21:25:37

标签: .htaccess mod-rewrite apache2

我正在尝试使用drupal 7安装将三个页面重定向到https并强制其他所有内容返回http。 孤立地,这里的第一个重写规则有效。启用后,无效,并且全部重定向回/index.php

# Turn SSL on for checkout except for checkout, signup/login and user/login
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^(\/checkout)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^(\/signup\/login)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^(\/user\/login)$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# Turn SSL off everything but checkout, signup/login and user/login
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !(checkout|signup\/login|user\/login) [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

1 个答案:

答案 0 :(得分:0)

这看起来很正确,规则对我有用。由于第一条规则有效,我假设RewriteEngine on高于这些规则。你的htaccess文件中还有其他规则吗?可能是导致问题的其他因素。

我尝试了以下规则,并按照预期重定向。缺少HTTPS规则不应该有所作为。

RewriteEngine on

# Turn SSL on for checkout except for checkout, signup/login and user/login
RewriteCond %{REQUEST_URI} ^(\/checkout)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^(\/signup\/login)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^(\/user\/login)$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/ssl/$1 [R=301,L]

# Turn SSL off everything but checkout, signup/login and user/login
RewriteCond %{REQUEST_URI} !(checkout|signup\/login|user\/login) [NC]
RewriteRule ^ssl/(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

我设置这些文件进行测试:

  • 公共/
    • 结帐(内容:结帐)
    • foobar(内容:foobar)
    • 注册/
      • 登录(内容:注册/登录)
    • 用户/
      • 登录(内容:用户/登录)
    • SSL /
      • 结帐(内容:ssl结账)
      • foobar(内容:ssl foobar)
      • 注册/
        • 登录(内容:ssl注册/登录)
      • 用户/
        • 登录(内容:ssl用户/登录)

您可以尝试使用这些规则,看看它们是否按预期工作:

$ curl -L http://samhuri.net/checkout
ssl checkout
$ curl -L http://samhuri.net/ssl/checkout
ssl checkout
$ curl -L http://samhuri.net/foobar
foobar
$ curl -L http://samhuri.net/ssl/foobar
foobar

传递curl -i标记以查看标题和状态代码。

所以我怀疑其他事情是错误的。您是否有其他规则可以重定向到https?