.htaccess htaccess-检测mod_php

.htaccess htaccess-检测mod_php,.htaccess,conditional-statements,detect,apache2.4,mod-php,.htaccess,Conditional Statements,Detect,Apache2.4,Mod Php,我正在努力限制/消除重复 根据我对一些LAMP托管提供商(尤其是在共享服务器上)的(有限)了解,有些PHP ini指令在PHP脚本中设置时被忽略,但在.htaccess中设置时被接受;工艺流程应该非常简单: 检测任何mod_php*-并在找到时设置环境变量 检查此环境变量并一次性设置所有php\u值指令 将所有请求重定向到PHP,以便根据配置处理请求 我们的目标是保留所有内容,除非PHP可以根据config-per-user/bot/api/etc来处理请求,这样显然不会将任何PHP代码作为

我正在努力限制/消除重复

根据我对一些LAMP托管提供商(尤其是在共享服务器上)的(有限)了解,有些PHP ini指令在PHP脚本中设置时被忽略,但在
.htaccess
中设置时被接受;工艺流程应该非常简单:

  • 检测任何
    mod_php*
    -并在找到时设置环境变量
  • 检查此环境变量并一次性设置所有
    php\u值
    指令
  • 将所有请求重定向到PHP,以便根据配置处理请求
我们的目标是保留所有内容,除非PHP可以根据config-per-user/bot/api/etc来处理请求,这样显然不会将任何PHP代码作为文本提供给用户

我不知道为什么这会变得更复杂,但我拒绝接受我必须将
php\u value
指令的(长)列表复制4次——仅仅因为Apache conf太(咒语删除)了,无法处理最简单的逻辑条件。。(面对桌子)。。或者我只是对apacheconf了解不够,请帮忙;下面的代码抛出了一个400错误,我无法让它工作,除非我为每个php版本复制每个块,并且为php版本热切换复制每个托管提供商自己的mod_php*后缀

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

<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>

重新启动发动机
重写基/
SetEnv MODPHP 1
SetEnv MODPHP 1
SetEnv MODPHP 1
php_值expose_php Off
php_值short_open_标记On
php_值显示错误
php_值最大执行时间60
php_值默认_字符集UTF-8
#为简洁起见,列表缩短
重写cond%{DOCUMENT_ROOT}/.auto.php-f
重写规则^(.*)$.auto.php[L]

然而,下面的代码是有效的;请注意:

  • 用于验证Apache2.4-for
  • 重写规则
    用于定义变量
  • 重定向
    是(有条件地)在变量名前加前缀
  • RewriteCond%{ENV:MODPHP}^1$
    用于测试变量是否为
    1


重新启动发动机
重写基/
重写规则。*-[E=MODPHP:1]
重写规则。*-[E=MODPHP:1]
重写规则。*-[E=MODPHP:1]
php_值expose_php Off
php_值short_open_标记On
php_值显示错误
php_值最大执行时间60
php_值默认_字符集UTF-8
重写cond%{ENV:MODPHP}^1$
重写cond%{DOCUMENT_ROOT}/.auto.php-f
重写规则^(.*)$.auto.php[L]
<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>