0

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

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

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

目标是保留所有内容,除非 PHP 可以根据配置处理请求——每个用户/机器人/api/等。..这显然不提供任何PHP代码作为文本O_o

我不知道为什么这必须更复杂,但我拒绝接受我必须重复一个(长)php_value指令列表 4 次 - 只是因为 Apache-conf 太(删除)来处理最简单的逻辑条件 .. (face-desk) .. 或者我只是对 Apache-conf 了解不够,请帮忙;下面的代码会引发400错误,除非我为每个 php-version 复制每个块 - 以及每个托管服务提供商自己的 mod_php*suffix -for PHP-version-hot-switching,否则我无法让它工作。

以下是 [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>
4

1 回答 1

1

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

  • <IfModule mod_authz_core.c>用于验证 Apache2.4 -for<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>
于 2018-09-19T12:56:29.747 回答