Apache2 mod_rewrite 可能有错误吗?

Apache2 mod_rewrite 可能有错误吗?

我的虚拟主机根目录中有一个名为“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

301 重定向来自目录斜杠指令的一部分mod_dir

我怀疑您的.htaccess工作不正常是由于以下一个或两个原因造成的:

  1. 您已AllowOverride配置为不允许.htaccess文件。
  2. .htacess文件是里面目录,因此 mod_dir 在处理文件/foo/之前应用其 301 重定向。.htaccess

答案2

记住文件系统始终优先

服务器上的文件系统始终优先于重写的 URL。例如,如果您有一个名为“foo”的目录,并且该目录中有一个名为“router.php”的文件,则您不能将 URL 重定向到“http://domain.com/foo”。实际情况是,Apache 进入“foo”目录,但看不到重写指令。

要解决这个问题,只需重命名您的目录(在开头或结尾添加下划线是一种简单的方法)。

相关内容