2011-10-21 8 views
1

Apacheを使用してファイルとアプリケーション要求を処理しています。アプリケーション要求はRewriteRuleを使用してパターンに一致するURLをアプリケーションサーバーに送信します。HTTPヘッダーをApache conf内で使用する既存のファイルに対してのみ設定する方法

上記のRewriteCondsと一致しないリクエストに対してのみ、特定のHTTPヘッダー(キャッシュコントロール)を設定したいと考えています。ファイル.htaccessを使用せずにこれを行う方法はありますか?

RewriteRule(Lフラグを使用)の後にHeader setというディレクティブを配置しようとしましたが、ヘッダーがまだ適用されています。

答えて

1

本当にあなたのrewriteRulesを投稿するべきです。

私たちができることは確かです。私が考えている最初のことは、rewriteRulesと一致する環境変数を設定することです(以前のものを逆にしてrewriteCondのセットを作成する)。[E=myvar:myvalue]タグを使用します。ヘッダー命令[env=myvar]の最後に使用可能な引数を使用して、このヘッダーを条件付きで設定します。

は、次に、あなたが言った:

は、.htaccessファイルを使用せずにそれを行うのいずれかの方法はありますか?

まあ、RewriteRulesと.htaccessファイルは大雑把に関係しています。 .htaccessに設定したものはどれも、ApacheのIO操作を防ぐためにVirtualHostにという素晴らしい指示があり、それぞれのリクエストで.htaccessファイルを読み込もうとすると、実際にはうまく収まるでしょう。

2つ目は、あなたが言った:私は

まあ(Lフラグを使用しています)のRewriteRule Afterヘッダに設定ディレクティブを配置しようとした

[L]フラグがオンで、いくつかのRewriteRulesを防ぎます同じディレクトリが順番に適用されるため、今すぐdirecltyにはチェーンされません。しかし、実際にrewriteRuleが終了した後([L])、rewriteRuleの出力はディレクトリに再適用され、RewriteRule(同じものかもしれません)がまだ適用されているかどうかを確認します。

このため、内部リダイレクトメッセージが多すぎることがあります。

VirtualHostでRewriteLog /a/file.logRewriteLogLevel 9を使用する唯一の方法があります(多くの驚きがありますが、一部のルールでは再帰が多すぎる場合があります)。

そのために知られていると良いのRewriteCondは次のとおりです。

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 

このするRewriteCondを前に付けどれだけルールが(多分[L]を使用して、ルールの終了後、あなたがディレクトリを入力し、第1の時間を適用されます。またはそれ以上のルールがないため)、結果はディレクトリルールで再テストされますが、変数REDIRECT_STATUSは空ではありません。この条件は、このenv変数が設定されている場合、ルールを避けるようにmod-rewriteに指示します。

関連する問題