【问题标题】:Disabled PHP for Single Directory with HTACCESS (PHP-FPM)使用 HTACCESS (PHP-FPM) 为单个目录禁用 PHP
【发布时间】:2015-03-06 23:52:17
【问题描述】:

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

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

【问题讨论】:

    标签: .htaccess php


    【解决方案1】:

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

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

    Apache: Disable php in a directory

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

    例如:

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

    这是在 Fedora 27、PHP-FPM 7.1.12 上测试并运行的。

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

    我在我的配置中禁用了 .htaccess 文件,但这种技术应该仍然有效。但是,&lt;directory&gt;.htaccess 文件中无效。希望只是删除它,然后离开:

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

    应该足够了。

    【讨论】:

      【解决方案2】:

      如何在给定的 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 处理程序信息,以免被覆盖。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-15
        • 2016-09-29
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        • 1970-01-01
        • 2019-06-19
        相关资源
        最近更新 更多