.htaccess重定向到Drupal 7站点上的HTTP

时间:2015-02-19 14:11:07

标签: .htaccess mod-rewrite drupal

我遇到从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

1 个答案:

答案 0 :(得分:0)

将您的第二个规则的URI条件更改为

RewriteCond %{THE_REQUEST} !\ /+user [NC]

您当前的规则也会在后续的重写周期中重定向index.php