%{REQUEST_FILENAME}.ext はどういう意味ですか? 余分な .ext が終わるのはなぜですか?

%{REQUEST_FILENAME}.ext はどういう意味ですか? 余分な .ext が終わるのはなぜですか?

には%{REQUEST_FILENAME}次のような文字列が含まれています。

/web/webroot/index.php

多くの人が、ファイルが存在し、次のように .php 拡張子を持っているかどうかをテストすることを推奨しています。

RewriteCond %{REQUEST_FILENAME}.php -f

.phpafter は冗長ではないでしょうか%{REQUEST_FILENAME}? 変数にはすでに が含まれているはずです.phpよね?

.phpafter を追加すると%{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

.phpafter は冗長ではないでしょうか%{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状態失敗し、書き換えは行われません (これは正しいです)。

ただし、このルールは厳密には正しくなく、特定の条件下では書き換えループが発生する可能性があります。次の関連する質問を参照してください。

関連情報