使用HTACCESS禁用单个目录的PHP(PHP-FPM)

时间:2015-03-06 23:52:17

标签: .htaccess php

我想禁用特定目录中的PHP文件解析,并了解如何执行此操作here。问题是我的服务器使用PHP-FPM,当我尝试在httpd.conf文件中使用Invalid command 'php_flag', perhaps misspelled or defined by a module not included in the server configuration时,我得到php_flag

如何使用PHP-FPM使用位于服务器上的web根目录上方的htaccess / httpd.conf文件禁用在给定的Web可访问目录中解析PHP文件?

2 个答案:

答案 0 :(得分:1)

由于最近Fedora 27切换到php-fpm,我也遇到了这个问题。不幸的是,使用mod_php的旧方法不适用于php-fpm。

我确实在这里找到了另一个肯定更相关的问题:

Apache: Disable php in a directory

它的要点是在配置文件中使用<directory><filesmatch>块,并为的每个目录使用SetHandler !想要PHP代码解释。

e.g:

<Directory "/path/to/no/phpfiles">
<Files "*.*">
SetHandler !
</Files>
</Directory>

这是在Fedora 27,PHP-FPM 7.1.12上测试和使用的。

与直接使用fpm配置不同,这种技术递归,因此将它放在您不希望PHP解释按预期工作的树的顶层。

我在我的配置中禁用了.htaccess文件,但这项技术仍然有效。但是,<directory>.htaccess文件中无效。希望只是删除它,然后离开:

<Files "*.*">
SetHandler !
</Files>

应该足够了。

答案 1 :(得分:0)

  

如何在给定的Web可访问的内容中禁用PHP文件的解析   目录,其中包含位于Web上方的htaccess / httpd.conf文件   使用PHP-FPM在服务器上root?

如果没有mod_php(你不想要),你就无法理解你的尝试方式,这就是你得到这个错误的原因。 PHP-FPM不是Apache模块。它独立于Apache运行。实际上它的目的是在负载很重的站点上使用,它可以控制所有的PHP进程。

您可以实现此目的的一种方法是使用Directory指令在虚拟主机文件中指定要运行PHP的确切路径。不要只是拥有PHP处理程序的东西,而是使用Directory指令将其与您希望它运行的实际路径一起包含在内。这是一个例子。

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html/
    ErrorLog /var/www/example.com/error.log
    CustomLog /var/www/example.com/access.log combined

    <Directory /path/to/php/only/folder/>
    #then you PHP handler stuff
    <IfModule mod_fastcgi.c>
        AddType application/x-httpd-fastphp5 .php
        Action application/x-httpd-fastphp5 /php5-fcgi
        Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi_example.com
        FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi_example.com -socket /var/run/php5-fpm_example.com.sock -pass-header Authorization
    </IfModule>
     </Directory>
</VirtualHost>

然后重启Apache。这应该限制它到该目录。您可能必须从其他配置中删除php处理程序信息,以便它不会被覆盖。

注意我没有测试过这个解决方案。