我有Apache / PHP的设置完全是这样的: https : //wiki.apache.org/httpd/PHP-FPM
它包括所提到的ProxyPassMatch规则:
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/path/to/files/$1
这发送所有请求.php在它的代理,并最终服务的PHP就好了。
但是,我一直在尝试做一些访问控制,代理似乎优先。 我的文件夹结构是这样的:
/ <-- PHP files /extra/ <-- PHP files /css/ /img/
应该有权访问根目录中的PHP文件,但我想限制访问extra目录。 我已经将这些行添加到我的主要configuration:
<Directory "/extra"> Order deny,allow Deny from all </Directory>
但PHP文件仍然执行…当我把一个不同types的文件在文件夹中,它被成功阻止,所以指令工程。 我猜ProxyPassMatch规则是禁止它为PHP文件工作。
我已经尝试了一些东西,比如将ProxyPassMatch规则放在一个<Directory>块中(不起作用,因为你不能在这样的块中使用ProxyPassMatch )并用[P]标志replaceProxyPassMatch来写一个RewriteRule (类似于这个: Apache 2.4 + PHP-FPM + ProxyPassMatch ,但是没有被代理)。
我的问题几乎和这个一样: http : //www.gossamer-threads.com/lists/apache/users/417758 。 然而,它没有得到明确的答案。
让我感到困惑的是你需要有代理规则,但是当你把它放进去的时候,没有其他东西似乎很重要(.htaccess也不能工作了)。 此外,这提出了有关安全的问题。 所有带.php东西都没有受到我想象的访问规定的影响,直接进入系统的内部。 如何将PHP-FPM与Apache中正确的安全规则结合起来?
把它放在你的ProxyPassMatch前面
ProxyPass /extra !
如果ProxyPass发现/ extra是当前文件夹,则不会使用ProxyPassMatch。 重要的是! 在行的末尾。
在这里看到更多的信息: ProxyPass
使用ProxyPassMatch .htaccess文件将被完全忽略。 类似的东西可能与主configuration文件中被忽略的指令有关。
请尝试使用FilesMatch和SetHandler ,如2015年对已经链接到的问题的回答中所述 ,以及此博客文章 。