- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 .htaccess 文件中有一堆 ErrorDocument 指令,以便捕获 Apache 可能向用户抛出的几乎所有可能的错误,并将所述用户重定向到我的错误 Controller ,然后将错误呈现给更多用户友好的方式。然而,这似乎不起作用。
例如,当我输入无效的 URL(例如 mysite.com/""##$##$!)时我总是收到 Apache 默认的 403 错误消息,而不是重定向到 error.php 文件。以下是我正在使用的指令。我还需要做其他事情才能让它发挥作用吗? (AllowOverride All 已设置)
ErrorDocument 403 /errors.php
如果这是实现绝对自定义错误处理的错误方法,请告诉我,我将不胜感激您在正确的方向上的插入。
谢谢!
编辑:哦,我只是想提一下这个。我编写了自己的 MVC 结构来重定向请求,并且效果很好。在 PHP 中,如果用户请求不存在的 URL,我自己的 404 错误将正常触发(或我定义的任何其他错误)。所以基本上,如果我输入 mysite.com/!!!!输入 URL,它会起作用,并且我得到 404。但是,每当我使用双引号字符启动请求时,都会触发默认的 Apache 403 错误。奇怪的。此外,500 错误也将无法重定向到 error.php,并且只会返回默认的 Apache 500 屏幕(例如,使用 header("HTTP/1.0 500 Internal Server Error");die(); 进行测试时) .
编辑3:我只是尝试将ErrorDocument 200“message”
放入我的.htaccess文件中,但没有发生任何事情,我打开的任何页面都可以正常打开。最坏的情况是,这应该陷入无限循环。最好的情况,它应该输出“消息”。它什么也没做,它只是忽略了 ErrorDocument。 Apache 的访问日志记录了一个正常的 200 OK header ,但 .htaccess 完全忽略了它。
最佳答案
问题中存在一些不同的误解。 PHP代码如下:
header("HTTP/1.0 500 Internal Server Error");
die();
永远不会触发 Apache 错误页面 - 它会触发浏览器的默认错误页面。一旦控制权交给 PHP,它就不会返回 Apache 进行错误处理。
ErrorDocument 仅适用于错误代码,不适用于成功代码。它在文档中
Syntax: ErrorDocument error-code document
http://httpd.apache.org/docs/current/mod/core.html#errordocument
如果您将一种浏览器错误页面误认为是服务器错误,那么这也可能是导致您的主要问题的原因。除非您的自定义错误处理程序输出一定量的数据,否则某些浏览器将始终显示自己的错误页面。确保您的输出大小至少为几千字节。
问题的原因很可能只是 Apache 的内置行为与您选择的测试 URL 相结合。来自 ErrorDocument 文档:
<小时/>Although most error messages can be overriden, there are certain circumstances where the internal messages are used regardless of the setting of ErrorDocument. In particular, if a malformed request is detected, normal request processing will be immediately halted and the internal error message returned. This is necessary to guard against security problems caused by bad requests.
编辑:如何在 Apache 中模拟 500 错误。我的第一个想法是 .htaccess
中的语法错误,但这不会触发自定义错误处理程序。我发现的最简单的方法是通过添加以下行在 .htaccess
中启用 CGI:
ErrorDocument 500 /500.php
Options +ExecCGI
AddHandler cgi-script .pl
然后添加一个崩溃的 perl 脚本:
#!/usr/bin/perl
safasfdsfdd_(*EYFIUOBAF(_*AS^FD_(*AWHD{
您需要确保 apache 用户可以执行 perl 脚本。这显示了我的自定义 500 处理程序。
但是,使用 PHP 时您不太可能触发 Apache 500,因此这可能不是一个有用的测试。
关于php - Apache ErrorDocument 指令不重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5765319/
我有一个带有多个虚拟主机的服务器。现在我想为整个服务器设置错误文档。我在 /var/www/error/* 中找到了我的错误站点,但使用 ErrorDocument指令我只能设置相对于文档根目录的错误
所以我有一个带有子目录的子域的apache服务器。我把我的目录变成子域。所以,而不是 example.site.com/mycoolsite它是 mycoolsite.example.com .或者换
有没有办法让您的PerlAuthenHandler,PerlAuthzHandler甚至您的PerlHandler更改请求的错误文档? 示例:当用户转到特定页面并收到错误消息时,我想让一个子例程选择将
我正在尝试对域及其所有子域使用相同的 404 ErrorDocument,子域在/var/www/路径中都有自己的目录 Apache ErrorDocument 指令需要一个相对路径(相对于当前目录)
在 Apache 中是否有这样的可能......(即重定向到一个外部 url,其路径导致 403 错误传递) ErrorDocument 403 http://www.sample.com/{{RED
我在子文件夹中有一个 htaccess 文件,如下所示: /subfolder/.htaccess 在 htaccess 文件中的以下代码设置一个 404 ErrorDocument ErrorDoc
请告诉我为什么这不起作用。它正在工作,但莫名其妙地决定停止工作。 在 php 中,如果找不到这样的页面,我会发出 404。 if(checkPageExists($escaped_url_page_n
我的 .htaccess 文件中有一堆 ErrorDocument 指令,以便捕获 Apache 可能向用户抛出的几乎所有可能的错误,并将所述用户重定向到我的错误 Controller ,然后将错误呈
我有一个 .htaccess 文件,如下所示: AddDefaultCharset utf-8 AddCharset utf-8 .html Order Allow,Deny ErrorDocumen
我有一个文件 index.php ,并在同一级别 .htaccess使用此代码: ErrorDocument 404 index.php 当我生成未找到错误时,会打印一个带有文件名的页面,因此,在这种
我希望将丢失文件和无效目录的请求重定向到自定义 404 错误页面。我相信这可以使用 2 种方法来完成。 # redirect invalid requests and missing files to
任何人都可以请指教吗?我希望我的网站访问者的默认页面是 index.php,对于所有不存在的页面,访问者应该看到 errordoc.php 所以我把它放在 .htaccess 中: ErrorDocu
我有一个来自 AWS EC2 服务的服务器,在 Linux ubuntu 上运行,并且我已经安装了 apache、php 和 mysql。 我已在文档根 /var/www/html 中添加了一个 .h
是否有类似通配符指令的东西可以捕获所有可能的错误并在单个自定义错误页面中处理它们? ErrorDocument 404 /error.php?code=404 ErrorDocument 403 /e
发生错误时,我正在尝试转移到另一台主机。我有这个,并且有效: ServerName test.com. ServerAlias test.com ProxyPreserveH
我想在我的项目中有一个自定义的 403 页面。所以我在 .htaccess 文件中添加了这些代码: Order deny,allow Deny from all Allow from 192.168.
我有多个ErrorDocuments在我的 .htaccess 文件中设置错误,例如 404、401、403 等,这些错误都重定向到我的错误页面,但 ErrorDocument当 PHP 报告 500
我基本上想要做的是将任何 404 请求重定向到 /404/但后来我想让它“拉”页面到 index.php?error=404 ,同时将 URL 保留为 /404/ - 然后我可以使用 PHP (使用
我的网站结构如下: - pages 404.php 403.php - app /css /-script index.php .htaccess 在我
我知道这可能是重复的,但我有更好的细节。我将 .htaccess 文件设置为显示最常见错误的自定义错误页面: # remove .php RewriteEngine On Rewr
我是一名优秀的程序员,十分优秀!