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

Apache.htaccess将https重定向到http,反之亦然,.htaccess,mod-rewrite,apache2,.htaccess,Mod Rewrite,Apache2,我正在尝试安装Drupal7,将三个页面重定向到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

我正在尝试安装Drupal7,将三个页面重定向到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]

这看起来是正确的,规则对我有效。由于第一条规则起作用,我将假定
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或从https重定向到https?

这看起来是正确的,这些规则对我很有用。由于第一条规则起作用,我将假定
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或从https重定向?

您是否找到了解决方案?你可能想把它贴在这里,我也被困在同一个问题上。我想这与Drupal如何处理URL有关,但我真的不确定。你有没有找到解决这个问题的方法?你可能想把它贴在这里,我也遇到了同样的问题。我想这与Drupal如何处理URL有关,但我真的不确定。