这个HTTP Authorization RewriteRule有什么作用?

The*_*can 16 mod-rewrite apache2

我在我的网站上的某个地方有一个重写递归错误,谷歌博特造成了,但我找不到导致它的网址,因为我的Loglevel很低.我提出了它,但到目前为止还没有再发生过.

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Run Code Online (Sandbox Code Playgroud)

所有Rewriterules对我来说都很好,除了这个之外还有[L]标志.

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

据我所知它只会设置环境变量E.但这不是一个非常愚蠢的方式吗?如果这是目标,你不应该使用SetEnv吗?

Eti*_*ais 18

Symfony开发团队有一个很好的答案.我引用:

看起来你的托管正在运行php作为fcgi,而不是php5_module,就像你的localhost一样.(phpinfo - 服务器API:CGI/FastCGI)

重点是php5_module自动处理HTTP_AUTHORIZATION标头,但fcgi_module没有.

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

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

它对我有用

  • 如果还有其他重写规则`RewriteRule.* - [E = HTTP_AUTHORIZATION:%{HTTP:Authorization}]`应该在**之前添加**,**没有"L"选项**. (7认同)

Wig*_*ige 7

此行将环境变量设置为用户身份验证字符串的值 - 实际上是设置变量而不是常量值.据我所知,SetEnv和SetEnvIf只允许您将环境变量设置为预定的常量.

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

  • 如果您愿意,您可以改用“SetEnvIf”。事实上,如果您在使用 mod_rewrite 的子目录中有 .htaccess 文件,这甚至可能更可取(因为您可能会覆盖您的身份验证!)。例如。`SetEnvIf 授权 .+ HTTP_AUTHORIZATION=$0` (2认同)