htaccess-检测mod_php

时间:2018-09-18 12:36:41

标签: .htaccess conditional-statements detect apache2.4 mod-php

我正在尝试限制/消除重复。

根据我对某些 LAMP 托管提供程序(特别是在共享服务器上)的(有限的)理解,有一些PHP-ini指令在PHP脚本中设置时会被忽略,但在以下情况下会被接受在.htaccess中设置;处理流程应该非常简单:

  • 检测任何mod_php*-并设置一个环境变量(如果找到)
  • 检查此环境变量并设置所有php_value条指令一次
  • 将所有请求重定向到PHP以根据配置处理请求

目标是保留所有内容,除非PHP可用于根据配置按每个用户/机器人/ api / etc处理请求。 ..并且由此显然不能将任何PHP代码用作文本O_o

我不知道为什么这要变得更复杂,但是我拒绝接受我必须将php_value指令的(长)列表重复4次-仅仅是因为Apache-conf也是如此(强制删除)以处理最简单的逻辑条件..(工作台)..或者我只是对Apache-conf不太了解,请帮忙;下面的代码引发 400 错误,除非我为每个php版本复制了每个代码块-并且每个托管服务提供商都有自己的mod_php *后缀-for PHP-version-hot,否则我无法正常工作-切换。

以下是[bl / thr]的内容:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    <IfModule mod_php_null.c>
        SetEnv MODPHP 1
    </IfModule>
    <IfModule mod_php5.c>
        SetEnv MODPHP 1
    </IfModule>
    <IfModule mod_php7.c>
        SetEnv MODPHP 1
    </IfModule>

    <If "%{ENV:MODPHP} =1">
        php_value expose_php          Off
        php_value short_open_tag      On
        php_value display_errors      On
        php_value max_execution_time  60
        php_value default_charset     UTF-8
        # list shortened for brevity

        RewriteCond %{DOCUMENT_ROOT}/.auto.php -f
        RewriteRule ^(.*)$ .auto.php [L]
    </If>
</IfModule>

1 个答案:

答案 0 :(得分:1)

但是,下面的代码有效。请注意:

  • <IfModule mod_authz_core.c>用于验证Apache2.4-用于<If>
  • RewriteRule用于定义变量
  • REDIRECT_(有条件地)以变量名开头
  • RewriteCond %{ENV:MODPHP} ^1$用于测试变量是否为1

<IfModule mod_rewrite.c>
    <IfModule mod_authz_core.c>
        RewriteEngine On
        RewriteBase /

        <IfModule mod_php_null.c>
            RewriteRule .* - [E=MODPHP:1]
        </IfModule>
        <IfModule mod_php5.c>
            RewriteRule .* - [E=MODPHP:1]
        </IfModule>
        <IfModule mod_php7.c>
            RewriteRule .* - [E=MODPHP:1]
        </IfModule>

        <If "%{ENV:REDIRECT_MODPHP} =1">
            php_value expose_php          Off
            php_value short_open_tag      On
            php_value display_errors      On
            php_value max_execution_time  60
            php_value default_charset     UTF-8
        </If>

        RewriteCond %{ENV:MODPHP} ^1$
        RewriteCond %{DOCUMENT_ROOT}/.auto.php -f
        RewriteRule ^(.*)$ .auto.php [L]
    </IfModule>
</IfModule>