2011-02-09 70 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