htaccess ErrorDocument与RewriteEngine冲突

时间:2014-09-21 17:22:28

标签: php apache .htaccess mod-rewrite

我对PHP和htaccess很新。我试图在我的项目中使用php-mvc框架。但是,他们不支持自定义错误页面。所以,我试图为我的项目实现它,因为我在我的项目中需要它。

当http响应为404时,htaccess显示自定义错误页面时出现问题。我已经在stackoverflow上检查了有关ErrorDocument和RewriteEngine的所有答案,这些答案都不适用于我。这是我的htaccess代码:

Options -Indexes

RewriteEngine On
RewriteBase /myproject/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

ErrorDocument 404 /myproject/public/404.html?page=error-404

如果我删除RewriteEngine On,它就可以了。我认为ErrorDocument与RewriteEngine冲突。

任何帮助将不胜感激。欢呼声。

1 个答案:

答案 0 :(得分:0)

问题在于这些条件:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

基本上说:如果请求不是存在的文件,目录或符号链接。所以,基本上是为404服务的。

因此,在这个实例中永远不会有apache生成404因为任何通常生成一个请求的请求都会被应用程序的index.php捕获。这意味着为了返回404.html页面,您需要从您的php应用程序链接到它。您需要编写PHP代码,以识别$_GET['url']何时没有指向有效的URL并重定向到/myproject/public/404.html?page=error-404