我想禁用特定目录中的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文件?
答案 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处理程序信息,以便它不会被覆盖。
注意我没有测试过这个解决方案。