有没有类似通配符指令来捕获所有可能的错误并在单个自定义错误页面中处理它们?
ErrorDocument 404 /error.php?code=404
ErrorDocument 403 /error.php?code=403
...
ErrorDocument NNN /error.php?code=NNN #possible use of RegExp?
Run Code Online (Sandbox Code Playgroud)
我知道我可能不会在这里处理很多自定义错误页面,但我对此很好奇.
我在.htaccess文件中有一堆ErrorDocument指令,以便捕获Apache可以向用户抛出的几乎所有可能的错误,并将所述用户重定向到我的错误控制器,然后以更加用户友好的方式呈现错误.但是,它似乎不起作用.
例如,当我输入无效的网址时,例如mysite.com/""##$##$!我总是得到Apache的默认403错误消息,而不是重定向到我的errors.php文件.以下是我正在使用的指令.我需要做任何其他事情来使它工作吗?(已设置AllowOverride All)
ErrorDocument 403 /errors.php
Run Code Online (Sandbox Code Playgroud)
如果这是接近绝对自定义错误处理的错误方法,请告诉我,我将非常感谢在正确的方向上轻推.
谢谢!
编辑:哦,我以为我会提到这个.我编写了自己的MVC结构来重定向请求,它运行良好.从PHP内部,如果用户请求不存在的URL,我自己的404错误将被解雇(或者我已经定义的任何其他错误).所以基本上,如果我进入mysite.com/!!!! 进入URL,它将工作,我得到一个404.但是,每当我用双引号字符启动一个请求时,默认的Apache 403错误就会触发.奇.此外,500错误也将无法重定向到errors.php,并且只会返回默认的Apache 500屏幕(例如,使用标头测试时("HTTP/1.0 500内部服务器错误"); die();) .
编辑3:我刚尝试放入ErrorDocument 200 "message"我的.htaccess文件,没有任何反应,我打开的任何页面都正常打开.最糟糕的情况是,这应该陷入无限循环.最好的情况,它应该输出"消息".它没有做,它只是忽略了ErrorDocument.Apache的Access Log记录了一个普通的200 OK标题,然而.htaccess完全忽略了它.
我有一个自定义404页面工作正常,除了我想在此页面上显示的消息.
我想说它找不到页面的网址,而是显示404页面的网址.
这是我的...
You were looking for <?php echo $_SERVER['REQUEST_URI'] ?>.
htaccess文件包含以下行: ErrorDocument 404 /404/
这样的事情在Apache中是可能的......(即重定向到外部URL,导致传递403错误的路径)
ErrorDocument 403 http://www.sample.com/{{REDIRECT_URL}}
Run Code Online (Sandbox Code Playgroud) 我的ErrorDocuments.htaccess文件中有很多设置用于404,401,403等错误,这些错误都会重定向到我的错误页面,但是ErrorDocument当PHP报告500时,从不显示500错误的设置.将500代码发送到浏览器和输出是空白的.我是否需要做一些特殊的事情才能启用500个错误文档以便与PHP一起使用?
我的指令看起来像这样:
ErrorDocument 401 /errorpage.php?error=401
ErrorDocument 403 /errorpage.php?error=403
ErrorDocument 404 /errorpage.php?error=404
ErrorDocument 500 /errorpage.php?error=500
Run Code Online (Sandbox Code Playgroud)
我查看了php.ini并且看不到任何明显会覆盖Apache设置的内容,而且ErrorDocument我的httpd.conf中也没有指令.我应该在哪儿看的其他地方?
提前致谢.
我在子文件夹中有一个 htaccess 文件,如下所示:
/subfolder/.htaccess
Run Code Online (Sandbox Code Playgroud)
在 htaccess 文件中的以下代码设置一个 404 ErrorDocument
ErrorDocument 404 /404.php
Run Code Online (Sandbox Code Playgroud)
问题是加载了根目录中的 404 页面而不是/subfolder/文件夹中的页面。我不能简单地将 htaccess 文件更改为使用 /subfolder/404.php,因为系统将安装在许多不同的地方。
有没有办法引用 htaccess 所在目录中的文件?
有没有办法将请求URI作为URL变量发送到404页面?例如,如果我用ErrorDocument指令转发我的404 ,有没有办法做这样的事情?这是我试过的代码,但显然没有用.
ErrorDocument 404 /pages/errors/index.php?e=404&url=%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)
我也尝试了一个mod_rewrite,但我也无法做到这一点.这是我尝试使用mod_rewrite:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /pages/errors/index.php?e=404&url=%{REQUEST_URI} [L,R=404]
Run Code Online (Sandbox Code Playgroud)
基本上我所要做的就是当用户键入类似的内容时,http://mysite.com/asdf它会转发到http://mysite.com/pages/errors/index.php?e=404&url=/asdf假设/asdf服务器上不存在该目录.
有没有一种简单的方法来实现这一目标?
我正在重新阅读这篇伟大的文章,偶然发现了我之前没有注意到的事情,这就是作者所谓的懒惰缓存.确切地说,这是上下文:
他们知道如何使用错误文档进行延迟缓存吗?
什么是延迟缓存以及错误文档与此相关的内容?我一直在谷歌上搜索这些短语,并且没有成功.
有人可以解释那是什么以及在哪里使用?我认为只是有一个不同的名称,我无法弄清楚是什么.
PS如果你知道如何更好地标记这个问题,请这样做!
我目前正在迁移到 nginx 服务器。我尝试将其放入我的 404 ErrorDocument 中,名为404.php:
<?php
header("Location: http://www.google.com/");
?>
Run Code Online (Sandbox Code Playgroud)
如果我现在尝试访问http://mydomain.com/404.php,这将按预期工作:它将我重定向到 Google。但是,一旦我尝试访问http://mydomain.com/iDoNotExist,就会显示 404 ErrorDocument ,而不会将我重定向到 Google。
这种行为对我来说似乎很奇怪。有什么办法可以解决这个问题吗?
编辑:
这是卷曲页面给我的结果:
卷曲-I mydomain.com/404.php
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.2.1
Date: Sun, 05 Jan 2014 11:31:15 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.4.4-14+deb7u7
Location: http://google.com/
Run Code Online (Sandbox Code Playgroud)
卷曲-I mydomain.com/iDoNotExist
HTTP/1.1 404 Not Found
Server: nginx/1.2.1
Date: Sun, 05 Jan 2014 11:33:49 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.4.4-14+deb7u7
Location: http://google.com/
Run Code Online (Sandbox Code Playgroud)
编辑2:
正如 hakre 所问,我来自Apache设置,是的,我正在使用Chromium。至于 …
我尝试了所有我在apache文档和stackoverflow和博客上发现的其他sugestions.当我将folloowing行添加到任何配置文件,如/etc/apache2/apache2.conf或/etc/apache2/conf.d/localized-error-pages或/etc/apache2/httpd.conf或/etc/apache2/sites-enabled/000-default:
ErrorDocument 503 "This is an error msg"甚至是HTML消息
ErrorDocument 503 "<h1> This is an error message </h1>
或外部URL重定向ErrorDocument 503 http://www.google.com它的工作原理.
但是,当我尝试内部重定向时,ErrorDocument 503 /ERROR_503.html
或者ErrorDocument 503 /error/ERROR_503.html我得到最后一行的默认消息:
此外,尝试使用ErrorDocument处理请求时遇到503 Service Temporarily Unavailable错误.
我试图把html错误页面放在DocumentRoot var/www,at var/www/error.尝试取消注释所有/etc/apache2/conf.d/localized-error-pages将所有错误设置为具有国际化的自定义页面的文件/usr/share/apache2/error.并且由于此文件中的消息与默认值相同,因此该行
此外,尝试使用ErrorDocument处理请求时遇到503 Service Temporarily Unavailable错误.不再显示了.但是,如果我改变线
`ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var`
Run Code Online (Sandbox Code Playgroud)
在本地化错误页面文件中放置到同一页面的新html,错误返回并且页面未显示.如果我编辑文件HTTP_SERVICE_UNAVAILABLE.html.var,浏览器消息也没有任何变化.
更多信息:我正在使用apache2将端口80上的所有请求通过工作端口重定向到端口8089的tomcat.我的配置文件是https://dl.dropboxusercontent.com/u/1105054/apache.zip
我想使用自定义页面来解决一些HTTP错误,所以我使用.htaccess文件.同时我想使用URL重写,但这不起作用,我不知道为什么.
这是我的.htaccess:
#Rewrite options
RewriteEngine On # Turn on the rewriting engine
#Error
RewriteRule ^error/([0-9]{3})/?$ index.php?page=error-$1 [NC,L]
#Other options
ErrorDocument 403 error/403
ErrorDocument 404 error/404
<Files .htaccess>
order allow,deny
deny from all
</Files>
IndexIgnore *
Options All -Indexes
Run Code Online (Sandbox Code Playgroud) 如何使 .htaccess 从 PHP 文件显示错误?我的意思是,当我搜索一个不存在的文件时,.htaccess 应该向我显示来自 error.php 的错误页面,但是 error.php 需要一个带有错误代码的参数。
注意: .htaccess 应该直接在当前 url 上显示错误而不重定向。我可以这样做还是不可能?还有其他方法吗?