
には%{REQUEST_FILENAME}
次のような文字列が含まれています。
/web/webroot/index.php
多くの人が、ファイルが存在し、次のように .php 拡張子を持っているかどうかをテストすることを推奨しています。
RewriteCond %{REQUEST_FILENAME}.php -f
.php
after は冗長ではないでしょうか%{REQUEST_FILENAME}
? 変数にはすでに が含まれているはずです.php
よね?
.php
after を追加すると%{REQUEST_FILENAME}
、TestString チェックによって次のように追加の .php が追加されるようです。
/web/webroot/index.php.php
何か単純なことを見逃している、それは確かだが、それが何なのか分からない。
文脈は次のとおりです。
RewriteCond %{THE_REQUEST} ^.*?\.php [NC]
RewriteRule ^ - [R=404,NE,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]
答え1
.php
after は冗長ではないでしょうか%{REQUEST_FILENAME}
? 変数にはすでに が含まれているはずです.php
よね?
ええ、はい、そしていいえ、それはあなたが何をしようとしているかによります。
RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_FILENAME}.php [L]
このルールを使用すると、拡張子のない URL をリクエストできます。例:/index
または および/foo
は、内部的にリクエストをそれぞれ/index.php
およびに書き換えます/foo.php
。
この例では、REQUEST_FILENAME
は形式の文字列です。つまり、同じに書き換える前に存在するテスト/web/webroot/index
です。/web/webroot/index.php
/index.php
状態失敗し、書き換えは行われません (これは正しいです)。
ただし、このルールは厳密には正しくなく、特定の条件下では書き換えループが発生する可能性があります。次の関連する質問を参照してください。