使用 .htaccess 进行 PHP 设置时出现 500 内部服务器错误

Posted

技术标签:

【中文标题】使用 .htaccess 进行 PHP 设置时出现 500 内部服务器错误【英文标题】:500 Internal Server Error when using .htaccess for PHP Settings 【发布时间】:2012-06-11 07:14:41 【问题描述】:

当我使用 .htaccess 进行以下 php 设置时,我在访问网站时收到 500 Internal Server Error

.htaccess 文件中的代码:

php_flag display_errors off
php_flag log_errors on

.htaccess文件的文件权限为644

我知道上面的代码是正确的。但是当它显示500 Internal Server Error 时,我也尝试了不同的代码(很可能是错误的),但没有任何效果。尝试的不同代码是:

php_value display_errors off
php_value log_errors on

php_value display_errors 0
php_value log_errors 1

500 Internal Server Error 的原因可能是什么?

在这个问题上向 cmets 学习后,我发现 .htaccess 上的 PHP 设置不适用于 FastCGI。因此,要更改 PHP 设置,我需要修改 php.ini 或者我需要在 php 代码中进行。当我无权修改 php.ini 文件并且我不想单独修改所有 PHP 文件时,是否有任何替代方法?

【问题讨论】:

您是否有权访问 Apache error.log 文件? 删除.htaccess文件时页面是否加载? 您实际上在 Apache 配置中使用 mod_php 吗?如果您通过 CGI 或 FastCGI 运行 PHP,则无法通过 .htaccess 进行配置。 @Pekka 我正在寻找 Apache error.log 文件。目前我无法访问它。我会和我的托管公司谈谈这件事。 @JoeyT 是的,当我删除 .htaccess 文件或从 .htaccess 文件中删除代码时,它会加载。 @lanzz 是的,我认为这可能是问题所在。我目前不确定。我将与我的托管公司确认这一点。谢谢大家的帮助。 删除这些行并执行 phpinfo() 脚本。您可能已经获得了 CGI、suPHP 或 FastCGI 实现。这些不处理“php_value”指令,而是使用每个用户/请求的 php.ini 文件。围绕这个主题有很多问答。 【参考方案1】:

就像上面的 cmets 所说:您需要以 Dynamic Shared Object 运行您的 php 模块才能使其工作,如 Apache PHP Request Hanlding Documentation 中所述

DSO 注意事项:

libphp 提供 Apache 指令,例如 php_$value 和 php_admin_$value。 DSO 是这些指令在 .htaccess 文件中有效的唯一选项 或 httpd.conf。当这些指令与并发 DSO 补丁一起编译时,它们应该被命名为 php4_$value 和 php5_$value。

cgi、fcgi、suphp 都不行。

【讨论】:

【参考方案2】:

正如您所发现的,修改 .htaccess 仅适用于 apache 模块,它会添加到 apache 可以理解的指令中。这不适用于 cgi 和其他。

php的方式是修改整个站点的php.ini,或者按目录或按用户修改。

对于 php5.5(不确定其他版本)修改 .user.ini 文件,您希望将这些设置应用到哪个目录。显然,将其设置在站点的根目录会使其适用于整个站点。

转到此处以获取有关 .user.ini 的信息:http://php.net/manual/en/configuration.file.per-user.php

前往此处查看指令列表以及可以更改的位置: http://php.net/manual/en/ini.list.php

最后,要检查您的文件(可能在 cmets 中提到),添加一个 phpinfo.php(名称无关紧要)文件,其中包含

<?php phpinfo() ?>

到目录,这样您就可以看到在该目录中运行的 php 脚本的设置。

【讨论】:

【参考方案3】:

我知道这个问题被问到已经有一段时间了,但是如果您的 .htaccess 不包含错误,则可能是导致您头痛的 cmets。

我最近升级了 WHM,突然在某些页面上出现 500 个内部服务器错误。查看日志后,我可以看到 .htaccess 文件是问题所在,我解决了问题,因为它们是由 cmets 引起的。

这就是为我解决问题的方法。

以前,我在 .htaccess 文件中有如下所示的指令:

Order Deny,Allow
Deny from 52.87.112.125   # whattheme.com
Deny from 192.163.217.239 # scanwp.net

WHM 升级后,我开始收到 500 Internal Server Error(升级中可能包含 apache)。

突然之间,apache 不喜欢指令中的 cmets 中线。我将上面代码的 .htaccess 文件修改为如下所示:

Order Deny,Allow
#  whattheme.com
Deny from 52.87.112.125

#   scanwp.net
Deny from 192.163.217.239

问题已解决。

这可能不是你的问题,但经过一番寻找,这个解决方案对我有用。祝你好运。

【讨论】:

以上是关于使用 .htaccess 进行 PHP 设置时出现 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 .htaccess 文件删除 .php 扩展名时出现 403 禁止错误

使用 .htaccess 压缩文件时出现 500 错误

htaccess:尝试 ErrorDocument 时出现 404 Not Found 错误

使用 .htaccess 删除 .html URL 扩展时出现问题

index.php 的 .htaccess 重定向正在破坏 404 页

包含自定义404错误页面时出现.htaccess问题