我正在尝试更详细地了解以下 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 文档到 Stack Overflow 上的答案。但似乎没有人能准确地解决我正在寻找的问题,我该如何仔细查看 REQUEST_FILENAME 变量以查看它的值?
通常,当我想查看 .htaccess 中引用的变量时,我将使用 print_r 查看 $_SERVER 全局变量,以查看这些值是什么服务器:
echo "<pre>";
print_r($_SERVER);
echo "</pre>";
die('fin');
这可以帮助我查看上面的 $_SERVER['REQUEST_URI'] 等值。但似乎 REQUEST_FILENAME 在我当前环境中的任何 PHP $GLOBALS 中都不可用。我确实看到了 SCRIPT_FILENAME 的值,并且有几个消息来源说这两个值是相等的,但不清楚它们是否是替代值,或者如果第一个不存在,则 REQUEST_FILENAME 是否回退到 SCRIPT_FILENAME。
通过稍微更新 htaccess 规则以输出 URL 中的值,我已经能够输出 REQUEST_FILENAME 值,将最后一行更改为:
RewriteRule (.+) index.php?p=%{REQUEST_FILENAME} [R=302,QSA,L]
但是为什么这个值在 PHP 的任何地方都不可用呢?有什么我忽略的东西可以帮助我了解这个变量的存储位置以及如何通过 PHP 查看它的值?