我正在尝试使用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]
答案 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]
我设置这些文件进行测试:
您可以尝试使用这些规则,看看它们是否按预期工作:
$ 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?