2009-05-08 10 views
5

のRewriteCond RewriteCondのサブディレクトリのマッチング方法は?

RewriteCond %{REQUEST_URI} !^/foo/ 

のための適切な正規表現に問題がある作品予想通り、つまり、/ fooの/で始まるすべてのURLへの書き換えを以下の適用されません。

RewriteCond %{REQUEST_URI} !^/foo/bar/ 

一方、私は期待どおりに動作しません。/foo/bar /で始まるURLはまだ書き換えられています。

サブディレクトリを除外するための適切な正規表現を入力するにはどうすればよいですか?

+0

がどのように実際のルールを見てください好き? – Gumbo

+0

それは動作するはずです。少なくとも3のRewriteLogLevelでRewriteLogを設定して質問に追加できますか? –

答えて

7

おそらく、ルールが適用される内部リダイレクトの新しいURLです。 L flagがそうです。

[...] RewriteRuleは(ディレクトリごとのコンテキストで書き換える場合頻繁に発生する)内部リダイレクトを生成した場合、この要求を再注入し、処理は最初RewriteRuleから出発して繰り返されることになります。

あなたが最初のURLパスが「/ fooの/バー」で起動しなかったことを確認するには、request lineTHE_REQUEST variableを参照)の代わりにチェック:

RewriteCond %{THE_REQUEST} !^[A-Z]+\ /foo/bar/ 
RewriteRule … 
+0

方法と理由はわかりませんが、これはうまくいきます – edgars

+0

@ガンボ:あなたの提案に使用した正規表現を正確に説明できますか?それは私のためにも動作し、最初のGETと一致すると思いますが、その後の '/'と '/ foo/bar /'の前にドメインがない理由を理解できません。 – Stratboy

+0

@Stratboyリンクされたページすべてを説明しなさい。さて、 '^ [A-Z] + \/foo/bar /'パターンは、サーバーのHTTPパーサーが見ているようにHTTPリクエスト行をチェックします。たぶんそれはあなたを気に散らす '\'ですが、それは依然としてパターンの一部です。 – Gumbo

関連する問題