文件系统不优先于 htaccess RewriteRule?

文件系统不优先于 htaccess RewriteRule?

如果文件系统中存在与浏览者请求相匹配的实际文件,我希望 RewriteRule 不会生效。因此,如果有人访问 mysite.com/realfile.php?foo=bar,并且 realfile.php 是一个真实文件,则浏览者将获得 realfile.php?foo=bar。但是如果有人访问 mysite.com/nonexistentfile.php,并且 nonexistentfile.php 不是真实文件,则 RewriteRule 应该解释并将请求传递给 process.php

我的.htaccess 中有以下内容:

 RewriteEngine on
 RewriteRule (.*)\.php$ process.php?id=$1 [QSA]

如果文件系统中没有与浏览者请求相匹配的真实文件,则此方法有效。如果浏览者输入 realfile.php?foo=bar...,则此方法无效,在这种情况下,他们会触发 RewriteRule。如果他们只执行 realfile.php,则此方法有效,但我希望查询字符串仍会传递给真实文件(如果存在)。我以为本地文件系统总是优先于 RewriteRule?

答案1

我可能会建议如下内容(类似于 WordPress 所使用的):

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

-f 标志检查现有文件,-d 标志检查目录 - 因此如果请求不是针对文件或目录,它将应用重写。

相关内容