我遇到从https到http的重定向问题。我这样做的原因是服务器出现性能问题,因此在Apache之上有一个缓存服务器(监听端口80)。
因此,为了减少负载,我想重定向所有没有cookie的请求(cookie只接受https),不要将登录页面(/ user)转到http。
这是我的.htaccess文件,我删除了其他所有内容进行测试,没有进一步的重写规则。第三个RewriteRule来自Drupal,将所有请求发送到index.php。
<IfModule mod_rewrite.c>
RewriteEngine on
# Rewrite http to https for /user.
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} =/user
RewriteRule ^ https://%{HTTP_HOST}/user [R=301,L]
#
# Rewrite https to http for anonymous.
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_COOKIE} !SSESS
RewriteCond %{REQUEST_URI} !=/user
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R=307,L]
#
# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
</IfModule>
现在重定向到/ user的https工作正常。但是https://domain/user然后返回以下响应标头(没有cookie时):
Status: HTTP/1.1 307 Temporary Redirect
Location: http://domain/index.php
所以,如果第二条规则失败,它想用307重定向到/index.php? 有谁知道为什么会这样?
非常感谢, MPJ
答案 0 :(得分:0)
将您的第二个规则的URI条件更改为
RewriteCond %{THE_REQUEST} !\ /+user [NC]
您当前的规则也会在后续的重写周期中重定向index.php
。