2011-02-09 7 views
13

Google Botが引き起こしたウェブサイトのどこかにリライト再帰エラーがありますが、私のLoglevelが低いため、原因となったURLを見つけることができません。私はそれを調達したが、それは今までには起こっていない。このHTTP認証RewriteRuleは何をしますか?

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

すべてのリライトは私にはうまく見えますが、これ以外の[L]フラグがあります。

私はそれをかなり理解できません。オープンソースの店舗システムMagentoからのものです。

限り、私は環境変数Eを設定するだけで何もしないと言うことができます。しかし、これを行うのは非常にばかげた方法ではありませんか?それが目標だったらSetEnvを使うべきではありませんか?

答えて

7

この行は、環境変数をユーザー認証文字列の値に設定しています。本質的には、定数値ではなく変数を設定しています。私が知る限り、SetEnvとSetEnvIfでは、環境変数をあらかじめ決められた定数に設定することしかできません。

設定されている変数は、実際にはHTTP_AUTHORIZATIONであり、Eではなく、私はこれがユーザー認証プロセスの一部であると推測します。

+1

あなたが望むなら、あなたは代わりに 'SetEnvIf'を使うことができます。実際、これはmod_rewriteを使用するサブディレクトリに.htaccessファイルがある場合(認証をオーバーライドする可能性があるため)、さらに望ましいかもしれません。例えば。 'SetEnvIf Authorization。+ HTTP_AUTHORIZATION = $ 0' – DocRoot

14

Symfony developers Groupは良い答えがあります。私は引用:

あなたのホストは、あなたのlocalhostのように、php5_moduleではなくfcgiとしてphpを実行しているようです。 (phpinfo - サーバAPI:CGI/FastCGI)

php5_moduleはHTTP_AUTHORIZATIONヘッダを自動的に処理しますが、fcgi_moduleは自動的に処理しません。

解決策は単純です - あなたのホスティングサーバー上の.htaccesに次の行を追加します

のRewriteRule。* - [E = HTTP_AUTHORIZATION:%{HTTP:認証}、L]。

それは働いていました私にとっては

+5

' 'RewriteRule。* - [E = HTTP_AUTHORIZATION:%{HTTP:Authorization}] 'は、**それらの前に**追加する必要があります。 "オプション**。 – naitsirch