1

これが私の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に特別な値がある場合、exprCondPatternap_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
4

1 に答える 1

3

apache 2.4を使用していますか?これap_exprは、2.4機能セットの一部であり、2.2の一部ではないすべての新機能です。

于 2012-07-26T17:11:43.970 に答える