我的虚拟主机根目录中有一个名为“foo”的目录。我试图拦截对一个不存在的文件(也称为“foo”)的请求,并将其重写为 PHP 文件,.htaccess 文件如下所示:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} /foo
RewriteRule ^(.*)$ router.php [L]
</IfModule>
我对“/foo”的 GET 请求一直从服务器返回 301 重定向到“/foo/”(目录)。为什么 Apache 在处理规则之前要这样做?我是否缺少配置选项?或者这无法完成?
答案1
答案2
记住文件系统始终优先
服务器上的文件系统始终优先于重写的 URL。例如,如果您有一个名为“foo”的目录,并且该目录中有一个名为“router.php”的文件,则您不能将 URL 重定向到“http://domain.com/foo”。实际情况是,Apache 进入“foo”目录,但看不到重写指令。
要解决这个问题,只需重命名您的目录(在开头或结尾添加下划线是一种简单的方法)。