我相信这是一个在某处被问过的问题,如果是这样,对不起,但谷歌搜索并没有给我任何有形的东西。
这是我的方案:
我正在使用apache http基本身份验证保护Web目录。所以我在根文件夹中有我的 .htaccess,我的 httpd.conf 被配置为覆盖所有内容,以便它考虑 .htaccess。我的.htaccess的内容如下:
身份验证类型基本
身份验证名称"测试"
AuthUserFile/etc/httpd/.test_pass
需要有效用户
.test_pass已成功与htpasswd建立。通过浏览器或任何html文件访问Web根文件夹时,我正确弹出身份验证弹出窗口。使用密码给了我预期的访问权限。
但是当我访问 php 页面时,身份验证弹出窗口没有出现,并且 php 页面呈现。
这是我的设置:
- 阿帕奇版本:2.4.6
- php-fpm: PHP 5.4.16 (fpm-fcgi) with Zend Engine v2.4.0
- 使用来自proxy_fcgi_module(共享)的代理传递进行通信在 Apache 2.4 和 PHP-FPM 之间
- 我也没有使用套接字连接,因为 apache 2.4.6 没有支持它
- 我的代理通行证设置如下,效果很好:ProxyPassMatch ^/(..php(/.)?$fcgi://127.0.0.1:9000/var/www/html/$1
我需要能够通过 apache 基本身份验证设置用户名/密码身份验证,以保护目录中的每个文件,包括 php 文件。
我正在使用开源软件;因此修改软件代码是最后的手段。
是否有针对php-fpm和mod_proxy_fcgi的解决方法/解决方案?
谢谢
经过数小时的研究,我明白发生这种情况的原因是因为 ProxyPassMatch 指令是要处理的第一个指令,这会导致 apache 忽略.php扩展的其他指令。
为了能够通过 php-fpm 使用其他 apache 指令proxy_fcgi_module应该使用 filesmatch 指令而不是 proxypassmatch。
语法如下:
<FilesMatch '.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>