2011-02-09 69 views
13

我的网站上有一个Google Bot造成的重写递归错误,但是我找不到导致它的URL,因为我的Loglevel很低。我举起了它,但迄今为止还没有发生。这个HTTP授权重写规则是做什么的?

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

所有Rewriterules对我来说都很好看,并且有[L]标志,除此之外。

我不太明白。它来自开源商店系统Magento。

据我可以告诉它什么都不做,只是设置环境变量E.但是,这不是一个非常愚蠢的做法吗?如果这是目标,你不应该使用SetEnv吗?

回答

7

该行将环境变量设置为用户认证字符串的值 - 本质上是设置变量而不是常量值。据我所知,SetEnv和SetEnvIf只允许你设置一个环境变量到一个预定的常量。

被设置的变量实际上是HTTP_AUTHORIZATION,而不是E.我猜想这是用户身份验证过程的一部分。

+1

如果你愿意,你可以使用`SetEnvIf`。事实上,如果在使用mod_rewrite的子目录中有.htaccess文件(因为您可能会覆盖您的身份验证!),这可能更可取。例如。 `SetEnvIf Authorization。+ HTTP_AUTHORIZATION = $ 0` – DocRoot 2016-05-06 21:08:00

14

Symfony developers Group对此有一个很好的答案。我引用:

它看起来像你的主机运行php作为fcgi而不是php5_module,就像你的本地主机一样。 (phpinfo - 服务器API:CGI/FastCGI)

问题是php5_module会自动处理HTTP_AUTHORIZATION标头,但fcgi_module不会。

解决方法很简单 - 这行添加到您的.htacces托管服务器上。

重写规则* - [E = HTTP_AUTHORIZATION:%{HTTP:授权},L]

它的工作对我来说

+5

如果还有其他重写规则:`RewriteRule。* - [E = HTTP_AUTHORIZATION:%{HTTP:Authorization}]`应该在**之前加**,**不加“L “ 选项**。 – naitsirch 2015-09-03 08:03:01