2

我在 Web 应用程序的根文件夹中有以下 .htaccess:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^\.(.*) [NC]
RewriteRule ^(.*) http://%1/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?req=%{REQUEST_URI}&%{QUERY_STRING}

这可以按我的意愿工作,但有一个例外:如果目录确实存在,则提供该目录,而不是将请求传递给 PHP 脚本。

因此,如果目录 /docs/ 存在,则将 index.htm 发送到浏览器,而对不存在的目录 /doesnotexist/ 的请求将交给 PHP 脚本。

有什么想法可以修改它,以便无论该位置是否存在,所有请求都交给 PHP?

4

1 回答 1

1

您的第二组条件限制匹配请求不指向现有文件或现有目录。这就是为什么当您浏览到/docs/并且目录存在时,规则不会触发。

要解决此问题,您需要做的就是摆脱第二个重写条件。这让它下面的规则在任何不指向现有文件的请求上触发。如果您确实想要将每个请求重定向到 PHP 脚本,那么还需要消除第一个重写条件。

RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?req=%{REQUEST_URI}&%{QUERY_STRING}

请注意,#取消注释该行,因此它不会被 mod_rewrite 拾取。

于 2012-08-18T14:51:22.370 回答