28

我的网站上某处出现了由 Google Bot 引起的重写递归错误,但由于我的 Loglevel 较低,我找不到导致该错误的 url。我提出了它,但到目前为止还没有再次发生。

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

所有的重写器对我来说都很好,并且有 [L] 标志,除了这个。

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

据我所知,它除了设置环境变量 E 什么都不做。但这不是一种非常愚蠢的做法吗?如果这是目标,您不应该使用 SetEnv 吗?

4

2 回答 2

25

Symfony 开发者组对此有一个很好的答案。我引用:

看起来您的主机正在将 php 作为 fcgi 运行,而不是 php5_module,就像您的 localhost 一样。( phpinfo - 服务器 API: CGI/FastCGI )

关键是 php5_module 会自动处理 HTTP_AUTHORIZATION 标头,但 fcgi_module 不会。

解决方案很简单 - 将此行添加到托管服务器上的 .htacces 中:

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

它对我有用

于 2012-11-07T14:04:02.203 回答
15

这一行将环境变量设置为用户身份验证字符串的值——本质上是设置一个变量而不是常量值。据我所知, SetEnv 和 SetEnvIf 只允许您将环境变量设置为预定的常量。

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

于 2011-02-09T16:35:08.577 回答