这个 HTTP Authorization RewriteRule 是做啥的?
Posted
技术标签:
【中文标题】这个 HTTP Authorization RewriteRule 是做啥的?【英文标题】:What does this this HTTP Authorization RewriteRule do?这个 HTTP Authorization RewriteRule 是做什么的? 【发布时间】:2011-06-24 06:28:23 【问题描述】:我的网站某处出现了由 Google Bot 引起的重写递归错误,但由于我的 Loglevel 较低,我找不到导致该错误的 url。我提出了它,但到目前为止还没有再次发生。
RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]
我觉得所有的重写器都很好,并且有 [L] 标志,除了这个。
我不太明白。它来自开源商店系统 Magento。
据我所知,它除了设置环境变量 E 之外什么都不做。但这不是一种非常愚蠢的做法吗?如果这是目标,您不应该使用 SetEnv 吗?
【问题讨论】:
【参考方案1】:Symfony developers Group 有一个很好的答案。我引用:
看起来您的主机将 php 作为 fcgi 运行,而不是 php5_module,就像您的 localhost 那样。 (phpinfo - 服务器 API: CGI/FastCGI)
重点是 php5_module 会自动处理 HTTP_AUTHORIZATION 标头,而 fcgi_module 不会。
解决方案很简单 - 将此行添加到托管服务器上的 .htacces:
RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization,L]
它对我有用
【讨论】:
如果有其他重写规则RewriteRule .* - [E=HTTP_AUTHORIZATION:%HTTP:Authorization]
应该在之前添加,不带“L”选项。【参考方案2】:
这一行将环境变量设置为用户身份验证字符串的值——本质上是设置一个变量而不是常量值。据我所知,SetEnv 和 SetEnvIf 只允许您将环境变量设置为预先确定的常量。
设置的变量实际上是 HTTP_AUTHORIZATION,而不是 E。我猜这是用户身份验证过程的一部分。
【讨论】:
如果您愿意,可以改用SetEnvIf
。事实上,如果您在使用 mod_rewrite 的子目录中有 .htaccess 文件,这甚至可能更可取(因为您可能会覆盖您的身份验证!)。例如。 SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
以上是关于这个 HTTP Authorization RewriteRule 是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章