我的.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]
答案 0 :(得分: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
答案 1 :(得分:0)
您只需将以下行添加到 .htaccess 文件中,即可将“/”定义为“ 404错误文档”,以便访问者返回主页或 index.php 。
ErrorDocument 404 /
如果您希望将它们重定向到特定页面,只需使用
ErrorDocument 404 /path/to/your/404/file.ext