2011-07-19 5 views
0

注:次のコードは、リダイレクトが行われた後に再度実行されないように、ケースをスキップするRewriteCond/RewriteRuleで囲まれています。mod_rewrite字句比較

なぜこれをテストすることができないのですか?

RewriteCond %{REQUEST_FILENAME} ="/unique/test/test" 
RewriteRule ^.*$ /match [R=301,L] 

私は次の行ですべてをoutputingていると私ははっきりREQUEST_FILENAMEが何であるかを見ることができます:

RewriteRule (.*) /test$1-filename-%{REQUEST_FILENAME}-URI-%{REQUEST_URI} [R=301,L] 

が、私はそれを一致させることはできません。

私はもともと、元のURIからのパスを変更したりしていなかったかどうかをテストするために、このような何かをしようとしているが、私は本当のテストして上記を得ることができないとして、これは確かに動作しない見ていた。

RewriteCond %{REQUEST_FILENAME} =%{REQUEST_URI} 

答えて

2

RewriteCondには、変数は最初の引数内でのみ展開されます。だからあなたのRewriteCondと実際にはREQUEST_FILENAMEの値をリテラルストリング%{REQUEST_URI}と比較しています。あなたが意図した何をすべきか

、あなたには、いくつかのトリックを行う必要があります。私はこれを正しく理解すれば

RewriteCond %{REQUEST_FILENAME}#%{REQUEST_URI} ^([^#]+)#\1$ 
+0

おかげで、この条件は私がREQUEST_URIがREQUEST_FILENAMEしたかった比較を与えるREQUEST_FILENAME#REQUEST_FILENAMEにREQUEST_FILENAME#REQUEST_URIを比較しています。 –

+0

間違いはありますか?パイプはポンドでなければならない? –

+0

@Derek Litz:うん、そうだよ。 – Gumbo