私はRegexp、RewriteCondおよびRewriteRuleに慣れています。Apache RewriteRuleが置換されないRewriteCondキャプチャグループがネゲートされたパターン
問題は、私のRewriteRuleが最後のRewriteCondのキャプチャグループを置換しないということです。
のApache v2.4.10
RewriteCond %{REQUEST_URI} !(apps/)?index.php
RewriteRule ^(apps/)?(.*)$ /%1index.php?$2 [QSA,NC,L]
ドキュメントによると、%1
はのRewriteCondでキャプチャグループに置き換えてください:(apps/)
そうではありません。
Apacheのデバッグ:
RewriteCond: input='/apps/x/y' pattern='!(apps/)?index.php' => matched
rewrite 'x/y' -> '/index.php?x/y'
デバッグ実際にはCondのが一致していることを述べているので、それがグループをキャプチャする必要があります。
入力にはapps/
部分が含まれています。
しかし、その後、リライトはそれを考慮していない...
試合を強制するために、次のように余分な(役に立たない)のRewriteCondを追加するが、はそれを動作させるん!
とパターンを否定せず、そう確かにキャプチャグループがキャプチャされ、置換されます。
RewriteCond %{REQUEST_URI} !(apps/)?index.php
RewriteCond %{REQUEST_URI} ^/(apps/)?
RewriteRule ^(apps/)?(.*)$ /%1index.php?$2 [QSA,NC,L]
考えてください。これは、キャプチャグループを評価しないような!
の正規表現からの最適化ですか?これはバグとして報告されるべきですか?それはどこに文書化されていますか?定義によってパターンがと一致しませんでしたので、をキャプチャするは何もありませんので
ドキュメント参照のおかげで、私は明らかにその部分を逃した – Simon