【问题标题】:htaccess ErrorDocument conflicts with RewriteEnginehtaccess ErrorDocument 与 RewriteEngine 冲突
【发布时间】:2014-11-15 16:44:54
【问题描述】:

我对 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 冲突。

任何帮助将不胜感激。干杯。

【问题讨论】:

  • 您面临什么问题,/myproject/public/404.html 真的存在吗?
  • 它确实存在。我可以从浏览器转到 404.html 页面。问题是当我发送带有 404 标头的错误消息时,它没有重定向到我的自定义错误页面。如果我删除了 rewriteEngine,我会重定向到 404 页面。

标签: php apache .htaccess mod-rewrite


【解决方案1】:

问题在于这些条件:

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

本质上说:如果请求不是针对存在的文件、目录或符号链接。所以,基本上什么可以服务于 404。

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

【讨论】:

  • 谢谢,乔恩。我编写了 php 代码来重定向错误页面并解决了我的问题。干杯。
猜你喜欢
  • 2015-01-09
  • 1970-01-01
  • 2023-03-28
  • 2021-07-02
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多