.htaccess
ErrorDocument 404
当我使用重写规则时页面没有重定向。获取500内部服务器错误。
没有RewriteRule
,ErrorDocument
工作正常。
我的代码
RewriteEngine On
<IfModule mod_rewrite.c>
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /stores/$1 [NC,L]
ErrorDocument 404 /404.html
</IfModule>
1条答案
按热度按时间3wabscal1#
这个规则的“问题”是,如果您请求一个不存在的文件,并且该文件也不存在于
/stores/
子目录中,那么它将导致无休止的重写循环(因此您将看到500内部服务器错误),因为它将尝试如下重写:/not-exists
(初始请求)/stores/not-exists
(第1次重写)/stores/stores/not-exists
(第二遍)/stores/stores/stores/not-exists
(第三遍)你并没有真正说明你在这里想要实现什么,但我假设
/stores
是一个“隐藏”子目录,你打算重写/stores
子目录中的实际文件。这是像这样的规则与Apache中定义的ErrorDocument 404
指令一起工作的唯一方式。因此,当重写到
/stores
子目录时,您需要在发出重写之前 * 检查请求是否Map到实际的文件。这样,任何不存在且未Map到/stores
子目录中的文件的请求都将被丢弃到Apache定义的404ErrorDocument
。例如,请尝试以下方法:
<IfModule>
容器不是必需的(但是您在此容器之外有RewriteEngine
指令-这无论如何都会使该点失效)。如果
.htaccess
文件位于文档根目录中,则此处不需要RewriteBase
指令。从结构上来说,最好先定义
ErrorDocument
。