如果启用PHP,如何签入.htaccess?

Bob*_*tiz 7 php apache .htaccess

.htaccess如果启用PHP,我如何让Apache的文件检查?我尝试之类的东西<IfModule !mod_php7.0.c>和<IfModule !mod_php7.c>,但它似乎没有按不执行任何操作时,启用/禁用模块.

当我.htaccess禁用PHP时,我想拒绝所有人拒绝访问.为了防止纯文本PHP代码泄露.

我想做这样的事情:

# If PHP is not installed, deny all access to .php files to prevent PHP code leakage
<IfModule !mod_php7.c>
    <FilesMatch \.php$>
        order deny,allow
        deny from all
    </FilesMatch>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

最终它会检查类似的东西if php7 AND php5 AND php4 are disabled, deny access.有任何想法吗?

此外,当AllowOverride为None时,.htaccess文件没有执行任何操作.有什么选择可以防止PHP代码以明文泄漏?

Ger*_*che 5

<IfModule !mod_php5.c>
    <FilesMatch ".+\.php$">
        Order Deny,Allow
        Deny from all
    </FilesMatch>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

在Apache 2.4中

<IfModule !mod_php5.c>
    <FilesMatch ".+\.php$">
        Require all denied
    </FilesMatch>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

在Apache 2.4中有几个新的有用功能:define,ifdefine和if,else,ifelse.

在下面我们可以默认拒绝,只有在PHP_IS_ENABLED定义时才启用.

<IfModule mod_php5.c>
    Define PHP_IS_ENABLED
</IfModule>

<IfModule mod_php7.c>
    Define PHP_IS_ENABLED
</IfModule>

# ...

<IfDefine !PHP_IS_ENABLED>
    <FilesMatch ".+\.php$">
        Require all denied
    </FilesMatch>
</IfDefine>
Run Code Online (Sandbox Code Playgroud)


cro*_*nfy 5

下面是要检查PHP的多个版本(例如,“如果PHP 5的解决方案或PHP 7已启用”),确实工作在.htaccess。

它需要带有mod_env模块的Apache 2.4 (在您的主机上启用了 99%)。

<IfModule mod_php5.c>
    SetEnv PHP_IS_ENABLED yes
</IfModule>

<IfModule mod_php7.c>
    SetEnv PHP_IS_ENABLED yes
</IfModule>

<If "reqenv('PHP_IS_ENABLED') == 'yes' || reqenv('REDIRECT_PHP_IS_ENABLED') == 'yes'">
    ... your directives
</If>
Run Code Online (Sandbox Code Playgroud)

REDIRECT_PHP_IS_ENABLED 需要对使用 mod_rewrite 内部重定向的请求进行此操作。