apache2在重写之前给出了404

时间:2013-10-21 11:57:54

标签: apache .htaccess mod-rewrite

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

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

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

所以看来apache2在检查文件stat之后会重写。 我该如何解决这个问题?


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

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

2 个答案:

答案 0 :(得分:2)

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

  1. 似乎没有加载Mod_rewrite
  2. Multiviews正在显示,好像已加载mod_rewrite
  3. 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
    

答案 1 :(得分:0)

您只需将以下行添加到 .htaccess 文件中,即可将“/”定义为“ 404错误文档”,以便访问者返回主页 index.php

ErrorDocument 404 /

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

ErrorDocument 404 /path/to/your/404/file.ext