【问题标题】:Internal Server Error with Htaccess fileHtaccess 文件的内部服务器错误
【发布时间】:2013-10-31 00:34:56
【问题描述】:

我正在创建一个 htaccess 文件,并尝试添加一个 404 页面。 但是,如果我转到此站点上不存在的页面,则不会显示 404 页面。相反,我收到“500 内部服务器错误”。

有什么想法可能是错的吗?

Htaccess:

SetEnvIfNoCase User-Agent "^libwww-perl*" block_bad_bots
Deny from env=block_bad_bots

RewriteEngine On
RewriteRule ^solution-([^/]*)/([^/]*)$ /solutions.php?category=$1&solution=$2 [L]
RewriteRule ^solution-([^/]*)$ /solutions.php?category=$1 [L]
RewriteRule ^page-([^/]*)$ /about.php?page=$1 [L]

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) $1.php [L]

ErrorDocument 404 /404.php

【问题讨论】:

  • 您可以在错误日志中找到答案。
  • 我在服务器的管理面板中找不到任何日志..

标签: .htaccess


【解决方案1】:

这是导致错误的规则:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) $1.php [L]

这是因为如果请求是针对一个不存在的文件一个不存在的目录,那么就会应用该规则。这意味着什么都不会返回 404,因为这条规则只会被应用。现在的问题是规则重写了.php 扩展,即使php 文件实际上并不存在。所以重写引擎再次循环,再次应用规则,然后引​​擎循环,再次应用规则,等等。

您需要添加另一个条件:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule (.*) $1.php [L]

条件是,如果您在请求末尾添加.php,并且如果该文件存在,则应用该规则。

【讨论】:

  • 谢谢!效果很好!
【解决方案2】:

你很接近。将来,您可以调试 .htaccess 文件并通过在每行(或一组行)之前添加 # 并查看错误所在来找出失败的原因。

首先,您不需要重新声明RewriteEngine On 两次。一次就够了。

如果您禁用第二个规则块(第二个 RewriteEngine On 所在的位置,您会注意到您的错误处理程序正常工作。这就是您的错误的来源。所以让我们分解一下。

RewriteCond %{REQUEST_FILENAME} !-d

这意味着:对于所有与物理目录不匹配的请求。

RewriteCond %{REQUEST_FILENAME} !-f

这意味着:对于所有与物理文件不匹配的请求。

RewriteRule (.*) $1.php [L]

这意味着:对于上述所有匹配条件,将用户发送到以 .php 为后缀的文件名。示例:mysite.com/bananas 会尝试加载页面内容 bananas.php

所以是在最后一行导致你出错。如果您故意输入一个不存在的 URL,它会尝试加载 bananas.php,然后由于该文件不存在而引发错误。但逻辑不会故障转移到您的 ErrorDocument 处理程序,因为它在查找该文件时已经遇到错误。

因此,简短的解决方案是删除该行块,然后您的 /404.php 将提供第一个行块未处理的任何内容。或者,您可以将最后一行从 $1.php 更改为一个包罗万象的脚本(例如 index.php),然后它会进行自己的错误检查并提供 404.php 的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2010-10-07
    • 2014-12-14
    • 2023-03-05
    • 1970-01-01
    • 2014-10-31
    • 2016-07-16
    相关资源
    最近更新 更多