【问题标题】:How to set a condition for .htaccess directives如何为 .htaccess 指令设置条件
【发布时间】:2016-03-11 04:46:44
【问题描述】:

我已将.htaccess 文件配置为将PHP 错误附加到日志文件中:

php_flag  log_errors on
php_value error_log  /home/user_id/public_html/PHP_errors.php
php_value error_reporting 6143 

并且它在远程服务器(linux)中运行良好。但是本地服务器(windows)中不存在上述路径。我试过了:

php_value error_log  ./PHP_errors.php

而且它在本地工作,但它在远程服务器上不工作。

是否可以将上述方向限制到远程服务器?比如:

Condition %{http_host} ^example.com$
php_value error_log  /home/user_id/public_html/PHP_errors.php

Condition %{http_host} ^localhost$
php_value error_log  ./PHP_errors.php

(我无法访问远程服务器中的 php.ini 文件,但我当然可以在本地更改它)

【问题讨论】:

  • 你的 Apache 版本是多少?
  • @anubhava apache 版本为:2.4.17

标签: php apache .htaccess error-logging


【解决方案1】:

使用 Apache 2.4 你可以使用这个条件 sn-p:

<If "%{HTTP_HOST} =~ m#^(www\.)?example\.com$#">
   php_value error_log  /home/user_id/public_html/PHP_errors.php
</If>

<If "%{HTTP_HOST} =~ m#localhost#">
   php_value error_log ./PHP_errors.php
</If>

【讨论】:

  • 感谢@anubhava,它适用于本地(2.4)但不幸的是远程服务器上的apache版本是(2.2.19)并且失败了。
  • 正如我所说,这只是 Apache 2.4 解决方案。无论如何,如果您有不同的 apache 安装,那么您也可以为旧 apache 使用不同的 htaccess
【解决方案2】:

您可以通过 PHP 来控制它。因此,您可以在 PHP 中包含一个配置文件,该文件包含在应用程序的启动中并设置 error_log() 和 error_reporting()。

然后您可以根据您的环境(本地或远程)拥有此文件的多个版本,或者您可以检查 $_SERVER 变量以设置正确的路径。

【讨论】:

  • 我想在.htaccess 文件中执行此操作。有可能吗?
【解决方案3】:

这里有一个类似的问题有一个很好的答案:https://stackoverflow.com/a/4139899/5550193

此外,您可能不希望为您的日志文件提供扩展名.php,因为它可能会导致一些潜在的漏洞利用。最好将其命名为 .log 或其他不可能由 Apache 发送给解释器的名称。

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    相关资源
    最近更新 更多