web-dev-qa-db-ja.com

ApachehttpdサーバーでRequestHeaderを設定することが機能していません

URIのクエリ文字列から取得した値を使用してRequestHeaderを設定する必要があるという要件があります。

採用されたアプローチは、RewriteCondReWriteRuleを書き込むことです。ここで、条件は%{QUERYSTRING}変数から値を抽出し、これを別の環境変数に設定し、後でこれを参照してリクエストヘッダーに追加することです。 。

しかし、これは私にとってはうまくいかないようです。 RHELでApache2.2を使用しています。

.confファイルの1つに配置されたhttpd構成は次のとおりです。

RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule . - [E=RU:%1]
Header set "X-Header" "%{RU}e" env=RU

注:値をハードコーディングしてリクエストヘッダーを設定しようとしましたが、プロキシモジュールも有効にしています。

RequestHeader set X-User-ID "test"
Header append X-test %{RU}e
RequestHeader set X-UserID %{RU}e early

「早期」オプションの使用も役に立ちませんでした。

1
Usman Azhar

元の構成では、Headerの代わりにRequestHeaderを使用しています。 Headerは、リクエストヘッダーではなくレスポンスヘッダーを設定します。

XヘッダーHTTPヘッダーのログをアクセスログ形式に追加してテストしましたが、正常に機能します。私が変更したのは。だけです。 RewriteRuleの^に

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^ - [E=RU:%1]
RequestHeader set "X-Header" "%{RU}e" env=RU

ヘッダーが設定されていることをどのようにテストしていますか?

1
Unbeliever

最後のコメントから判断すると、外部リダイレクトに耐える環境変数を設定しようとしているようです。環境変数またはリクエストヘッダーはリクエストごとにスコープされるため、これを行うことはできません。ただし、COフラグを使用してRewriteRulesにCookieを設定することでこれを行うことができます。

@Unbelieverによって提案されたソリューションは、環境変数がApachemod_rewriteによって実行される内部リダイレクトに耐えられるようにする場合に最適に機能します。カスタムヘッダーは すぐに評価できる ではない可能性があることに注意してください。

0
Amin Mozafari