尝试使用 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 错误