【问题标题】:500 Internal Server Error when trying to use ErrorDocument to handle request尝试使用 ErrorDocument 处理请求时出现 500 内部服务器错误
【发布时间】: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 个错误,它也可能会积累大量其他答案。最近才添加了这样一个额外的答案。

标签: php regex apache .htaccess mod-rewrite


【解决方案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文件夹中
      猜你喜欢
      • 2017-08-27
      • 2017-11-25
      • 1970-01-01
      • 2012-01-08
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      相关资源
      最近更新 更多