尝试使用 ErrorDocument 处理请求时出现 500 内部服务器错误

Posted

技术标签:

【中文标题】尝试使用 ErrorDocument 处理请求时出现 500 内部服务器错误【英文标题】:500 Internal Server Error when trying to use ErrorDocument to handle request 【发布时间】:2014-01-12 04:18:42 【问题描述】:

我有这个 .htaccess 文件:

Options -Indexes
RewriteEngine on

ErrorDocument 404 /404.php

RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^([^/]*)/?(.*)$ ./$1.php

RewriteCond %THE_REQUEST \.php
RewriteRule ^(.*)$ - [L,R=404]

但是,当我转到 localhost/example.php 时,它返回 500 Internal Server Error。

有什么帮助吗?谢谢。

编辑:

出现的完整错误信息是:

Not Found

The requested URL /example.php was not found on this server.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.

【问题讨论】:

你试过我下面贴的答案了吗? 我投票决定关闭这个问题,因为 500 错误是一个非常普遍的“出现问题”错误。这可能是配置错误、权限问题或编码错误。您的服务器的错误日志中提供了有关错误的具体原因的更多信息。如果不查看日志,就无法准确回答这个问题。这里的任何答案都是猜测,可能的答案有数百甚至数千个。 @StephenOstermiller 我认为这个问题很好,因为它收到了一个适用于 OP 的答案。如果您是 mod 重写专家,请查看下面的帖子并编辑标题以使其更具体,这对社区比关闭问题更有帮助。 问题是这个答案不太可能很好地为其他有类似问题的人服务。随着时间的推移,随着人们发现他们设法以其他方式解决的其他 500 个错误,它也可能会积累大量其他答案。最近才添加了这样一个额外的答案。 【参考方案1】:

我遇到了这个问题。但我的错误是服务器磁盘已满 100%。您应该检查您的服务器磁盘,作为一个考虑的解决方案。

【讨论】:

【参考方案2】:

您只需将此代码添加到您的 .htaccess 文件中

# BEGING WordPress
RewriteEngine On
RewriteBase /
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
# END WordPress

【讨论】:

您可以通过解释它的作用或工作原理来改进此答案。【参考方案3】:

由于您想在页面中隐藏 .php 扩展名,请尝试通过执行以下操作从 .htaccess 文件中删除该扩展名:

更改:ErrorDocument 404 /404.php 为 ErrorDocument 404 /404

希望这会有所帮助。

JJ

【讨论】:

【参考方案4】:

由于循环错误,您很可能获得 500。

404.php 从最后一条规则中排除为:

ErrorDocument 404 /404.php

Options -Indexes -MultiViews
RewriteEngine on

RewriteCond %THE_REQUEST \.php [NC]
RewriteRule ^(?!404\.php)$ - [L,NC,R=404]

RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME.php -f
RewriteRule ^([^/]+)/?(.*)$ ./$1.php [L]

【讨论】:

是的,这行得通 :) 但是,当我访问存在的页面时,例如index.php,它加载 index.php 而不是 404.php。知道如何做到这一点吗? 如果页面存在,那么将加载该页面的 .php 而不是 404.php。只有page.php不存在时才会显示404.php。 哦。基本上,我的意图是删除并防止在 URL 中使用 .php(如果用户尝试在 URL 中使用/添加 .php,则会导致 404 错误)。您能建议一种通过 htaccess 执行此操作的方法吗? 你的规则不是已经这样做了吗?但是,您应该显示更常见的 403(禁止)错误,而不是显示 .php 的 404。 是的,但是如果用户尝试访问存在的页面,例如user.php,它将加载 users.php 而不是加载 404.php。如果请求是/users,它应该只加载users.php【参考方案5】:

404.php 是否真的设置在文件系统的根目录中?

我猜不是。

试试 ../404.php 之类的东西

顺便说一句:您查看过您的 apache 日志文件吗?

【讨论】:

这很可能是问题所在,但我认为../404.php 不合适 @Phil:请分享原因 404.php 位于根目录:( @user3130907 您的文件系统(硬盘)的根目录还是您网站的根目录? /404.php 表示文件系统的根目录(硬盘) 存储在www文件夹中

以上是关于尝试使用 ErrorDocument 处理请求时出现 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

Xampp 错误“此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。”

尝试使用 ErrorDocument 时出现 404 Not Found 错误

尝试处理 CORS 请求时出现 ParseError

Nodemailer /发送给出404错误

尝试调用 AIA 时,Keycloak“处理对身份提供者的身份验证请求时出现意外错误”

RewriteRules 和 ErrorDocument 规则不适用于 SSL 虚拟主机