これが私のmod_rewrite設定です:
RewriteEngine On
RewriteCond expr "true"
RewriteRule .? - [L]
RewriteRule ^(.*)$ $1 [QSA,L]
そしてここに関連するロギング出力:
RewriteCond: input='expr' pattern='true' => not-matched
Apacheのドキュメントには
構文:RewriteCond TestString CondPattern
TestStringに特別な値がある場合、
expr
CondPatternはap_exprとして扱われます。以下の例で
-strmatch
は、を使用してサイトのホスト名と比較し、REFERER
不要なホットリンクをブロックしています。
RewriteCond expr "! %{HTTP_REFERER} -strmatch '*://%{HTTP_HOST}/*'"
RewriteRule ^/images - [F]
したがって、CondPatternがap_exprとして扱われ、ap_exprが定義ごとに明示的に処理できるtrue
場合、そのパターンに適合する最も単純な式が機能しないのはなぜですか?正確には、一致する式は私には機能しません。このテクニックが誰かのために働いたことを確認できる人はいますか?
私は実際には、従来のmod_rewrite条件では実行できない非常に複雑な式を使用しているため、このメソッドを使用できるかどうかを知ることは非常に重要です。
編集:
怠惰なものについては、ここから直接コピーされたap_exprのBNF定義:
expr ::= "true" | "false"
| "!" expr
| expr "&&" expr
| expr "||" expr
| "(" expr ")"
| comp