次の htaccess ルールをより詳細に理解しようとしています。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p=$1 [QSA,L]
</IfModule>
具体的には、REQUEST_FILENAME の仕組みを理解しようとしています。mod_rewrite ドキュメントからスタック オーバーフローに関する回答まで、これについて議論しているいくつかのリソースがあります。しかし、私が探しているものに正確に対処しているようには見えません.REQUEST_FILENAME変数を詳しく見て、その値を確認するにはどうすればよいですか?
通常、.htaccess で参照されている変数を調べたいときは、print_r を使用して $_SERVER グローバルを調べ、それらの値がサーバーのものかどうかを確認します。
echo "<pre>";
print_r($_SERVER);
echo "</pre>";
die('fin');
これは、上記の $_SERVER['REQUEST_URI'] などの値を確認するのに役立ちます。しかし、私の現在の環境では、REQUEST_FILENAME が PHP $GLOBALS のいずれでも利用できるようには見えません。私は SCRIPT_FILENAME の値を確認しており、これら 2 つの値が等しいといくつかの情報源が述べていますが、それらが代用されているのか、最初の値が存在しない場合に REQUEST_FILENAME が SCRIPT_FILENAME にフォールバックするのかは明らかではありません。
htaccess ルールを少し更新して URL に値を出力し、最後の行を次のように変更することで、REQUEST_FILENAME 値を出力できました。
RewriteRule (.+) index.php?p=%{REQUEST_FILENAME} [R=302,QSA,L]
しかし、この値が PHP のどこにもないのはなぜでしょうか? この変数が格納されている場所と、PHP を介してその値を表示する方法を理解するのに役立つ見落としているものはありますか?