这个HTTP Authorization RewriteRule有什么作用?

时间:2011-02-09 16:20:56

标签: mod-rewrite apache2

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

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

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

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

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

2 个答案:

答案 0 :(得分:18)

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

  

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

     

关键是php5_module自动处理HTTP_AUTHORIZATION标头,但fcgi_module没有。

     

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

     

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

它对我有用

答案 1 :(得分:7)

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

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