3

我的 .htaccess 中有一个重写规则:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^vt$ vt.php [L]
</IfModule>

如果我的网站目录中存在文件'vt',则重写完成。但如果文件 'vt' 不存在,apache2 只会给出 404 错误。

所以看起来apache2在检查文件统计后会重写。我该如何解决?


我认为这是一个错误。我最终使用此规则来避免使用两个文件(vt 和 vt.php)。

RewriteRule ^vt$ - [H=application/x-httpd-php]
4

2 回答 2

2

听起来这里可能发生了两件事。

  1. Mod_rewrite 似乎没有加载
  2. Multiviews使它看起来好像加载了 mod_rewrite

做什么Multiviews,是 mod_negotiation 的一部分,它试图“猜测”请求是什么,如果它缺少诸如扩展之类的东西。因此,Multiviews打开时,如果它看到请求/vt并且文件vt不存在,它会猜测并找到/vt.php并提供服务,否则它什么都不做并返回 404。这将使它看起来好像 mod_rewrite 规则实际上是被应用。如果实际打开了 mod_rewrite,那么即使打开了 mod_negotiation 并且文件丢失(这将导致 404),它也会应用规则。

所以 1. 确保实际加载了 mod_rewrite。为此,请检查您的 httpd.conf 文件,应该有一行如下所示(未注释):

LoadModule rewrite_module modules/mod_rewrite.so

或者您可以尝试删除<IfModule mod_rewrite.c>容器,如果您收到 500 服务器错误,则 mod_rewrite加载。

然后 2. 在你的 htaccess 文件中添加这一行来关闭Multiviews

Options -Multiviews
于 2013-10-21T15:27:59.807 回答
0

您可以简单地将“/”定义为“ 404 错误文档”,方法是将以下行附加到您的.htaccess文件中,以便访问者返回您的主页index.php

ErrorDocument 404 /

如果您希望它们被重定向到特定页面,只需使用

ErrorDocument 404 /path/to/your/404/file.ext
于 2013-10-21T12:12:26.453 回答