php - 在 cPanel 中创建自定义 PHP 错误页面,而不将它们从抛出错误的页面重定向

标签 php apache .htaccess cpanel custom-error-pages

我正在尝试使我的网络服务器具有自定义的错误文档/页面,但带有 PHP 代码包含在其中,而不会将它们重定向到抛出错误的页面错误。

假设我们正在导航到 http://website.com/pages/1 并抛出错误 500,默认 页面将只是带有文本“错误 500(内部服务器错误)”的空白页面,看起来像这样:

http://i.imgur.com/WLO7JkL.png

正如您从上面看到的,它没有重定向到抛出错误的页面。我希望此页面看起来“网站的一部分”,但其中包含 PHP 内容。

我无法通过编辑您在下面看到的页面将 PHP 内容包含在 cPanel 的错误页面中:

http://i.imgur.com/jtYjHj8.png

如果我要编辑上面的错误 500 页面,下面的内容就是 http://website.com/pages/1 会重定向到 http://website.com/500.shtml 然后再重定向到 http://website.com/500.php

完全不希望它重定向,否则这意味着刷新页面本质上只会刷新 500.php 页面,而不是刷新 /pages/1

<script language="javascript">
    window.location.href = "http://www.website.com/500.php"
</script>
<meta http-equiv="refresh" content="0;URL='http://website.com/500.php'" />  

会存在完全相同的问题,只是它不是 2 个链重定向,而是使用 .htaccess 文件中的以下内容只是 1 个重定向

ErrorDocument 400 http://website.com/400.php
ErrorDocument 401 http://website.com/401.php
ErrorDocument 403 http://website.com/403.php
ErrorDocument 404 http://website.com/404.php
ErrorDocument 500 http://website.com/500.php

Current Result: Redirecting to /500.php

Expected Result: Displaying 500.php in/on http://website.com/pages/1 without redirect

我怎样才能拥有带有 php 内容的自定义错误页面而不使其重定向到抛出错误的页面之外?

有没有办法通过 root 来完成(我可以让我的主机做些什么吗?如果可以的话?)

最佳答案

正如其他人回答的那样,这应该可行:

ErrorDocument 500 /500.php

如果您没有指定完整的 URL,它只显示页面(内部重定向),如果您指定了完整的 URL,那么它会向客户端发出重定向。这是 Apache 在这里描述的:http://httpd.apache.org/docs/2.4/mod/core.html#errordocument

Note that when you specify an ErrorDocument that points to a remote URL (ie. anything with a method such as http in front of it), Apache HTTP Server will send a redirect to the client to tell it where to find the document, even if the document ends up being on the same server.

以上内容对您不起作用的事实意味着以下几件事之一:

  1. 你做错了,尽管你声称不是,但仍然指定了完整的 URL。
  2. Cpanel 正在添加完整的 URL(不确定您是如何编辑 .htaccess 文件的,或者是否是通过上面的 GUI 完成的)。
  3. 您的 .htaccess 文件被忽略(可能是因为您正在 GUI 中设置值,或者可能是因为 FileInfo 在服务器级别设置,因此无法在 .htaccess 文件中指定(参见此处: http://httpd.apache.org/docs/2.4/custom-error.html ),在这种情况下,它必须从某处的其他配置中获取完整的 URL。
  4. 500.php 脚本自己进行重定向(如果保留日志并查看是否返回一页或两页,开发者工具应该很明显)。
  5. Apache 中有一个错误(我和其他人都不知道)。
  6. 魔法

你能检查一下那些东西吗?

可能还有助于了解您使用的 Apache 版本?

您是否也尝试过一个普通的 500.html 文件,看看它是否可以在不重定向的情况下工作?从理论上讲,500.php 文件也应该没问题,但缩小范围会很有趣(并且还会显示对 500.html 的更改是否被提取和使用,或者它是否仍指向 500.php,这可能会表明这是从其他配置中获取的,而不是你想象的)。

关于php - 在 cPanel 中创建自定义 PHP 错误页面,而不将它们从抛出错误的页面重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32599981/

相关文章:

apache - 从 htaccess 重写规则中删除硬编码的 url

php - appcfg.py : error: Error parsing app\app. yaml:无法将值 'php55' 分配给属性 'runtime'

php - Laravel 4,如何测试复选框是否被选中?

php - 来自mysql存储过程和php json_decode的正确格式的关联数组

apache - 仅针对 nginx 上的特定 url 使用 https 重定向

php - 并非所有 header 都在 $_SERVER [PHP] 中可用

php - 404 未找到,请求的 URL <<url name>> 在 wordpress 的此服务器上未找到

javascript - 当有另一个持久的 php 脚本在运行时,没有 php 脚本可以在服务器上运行

codeigniter - 删除 index.php 并处理两个 Codeigniter 站点的子域(当其中一个站点位于另一个站点时)

Apache(不是浏览器)正在缓存我的文件