htaccess - 检测 mod_php
htaccess - detect mod_php
我正在尝试 limit/eliminate 复制。
根据我对某些 LAMP 托管服务提供商(尤其是在共享服务器上)的(有限)理解,有一些 PHP-ini 指令是在 PHP-script 中设置时被忽略,但在 .htaccess
中设置时被接受;流程应该非常简单:
- 检测任何
mod_php*
- 如果找到则设置一个环境变量
- 检查此环境变量并设置所有
php_value
指令一次
- 将所有请求重定向到 PHP 以根据配置处理请求
objective 将保留所有内容,除非 PHP 可用于根据配置处理请求 -- 根据 user/bot/api/etc。 ..并且显然不会将任何 PHP 代码作为文本 O_o
我不知道为什么这必须更复杂,但我拒绝接受我必须复制一个(长)php_value
指令列表 4 次——仅仅因为 Apache-conf太(咒骂删除)来处理最简单的逻辑条件..(face-desk)..或者也许我只是对Apache-conf了解不够,请帮忙;下面的代码抛出一个 400 错误,除非我为每个 php-version 和每个托管服务提供商自己的 [=42] 复制每个块,否则我无法让它工作=]*后缀-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>
但是下面的代码有效;请注意:
<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>
我正在尝试 limit/eliminate 复制。
根据我对某些 LAMP 托管服务提供商(尤其是在共享服务器上)的(有限)理解,有一些 PHP-ini 指令是在 PHP-script 中设置时被忽略,但在 .htaccess
中设置时被接受;流程应该非常简单:
- 检测任何
mod_php*
- 如果找到则设置一个环境变量 - 检查此环境变量并设置所有
php_value
指令一次 - 将所有请求重定向到 PHP 以根据配置处理请求
objective 将保留所有内容,除非 PHP 可用于根据配置处理请求 -- 根据 user/bot/api/etc。 ..并且显然不会将任何 PHP 代码作为文本 O_o
我不知道为什么这必须更复杂,但我拒绝接受我必须复制一个(长)php_value
指令列表 4 次——仅仅因为 Apache-conf太(咒骂删除)来处理最简单的逻辑条件..(face-desk)..或者也许我只是对Apache-conf了解不够,请帮忙;下面的代码抛出一个 400 错误,除非我为每个 php-version 和每个托管服务提供商自己的 [=42] 复制每个块,否则我无法让它工作=]*后缀-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>
但是下面的代码有效;请注意:
<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>