2

我有一个简单的 Apache2.4 和 PHP-FPM 设置,我正在尝试启用 +Indexes 选项,但我得到 404“找不到文件”。尝试访问没有索引文件的文件夹时,即使启用了自动索引。

这是我的虚拟主机的一部分:

#php
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/var/run/fpm/fatal.sock|fcgi://

#super public directory with Indexes!
<Location /pub>
    Options +Indexes
    IndexOptions +FancyIndexing
</Location>

当我尝试访问http://domain.com/pub/时,我希望看到我放在那里的文件列表,但我收到错误 404 Not Found。

我想知道这是从哪里来的,因为 ProxyPassMatch 不应该转发请求,因为查询中没有 .php 所以接下来是目录索引,它查找不存在的 index.php (404)但是为什么 mod_autoindex 不起作用?

当我删除 ProxyPassMatch 行时,自动索引工作得很好,我看到列出的文件夹内容。有任何想法吗?

4

1 回答 1

5

我在这里找到了答案http://blog.famillecollet.com/post/2014/03/28/PHP-FPM-and-HTTPD-2.4-improvement

由于 ProxyPassMatch 指令在每个请求的最开始进行评估:

  • AddType(用于 MultiView)或 DirectoryIndex 指令不可用

  • 每个目录的权限管理不可用

  • 每个别名指令都需要另一个代理规则

稍后评估的 SetHandler 指令更加灵活/可用。

所以我改变了我的虚拟主机看起来像这样并摆脱了 ProxyPassMatch 指令。

<FilesMatch \.php$>
  SetHandler "proxy:unix:/var/run/fpm/fatal.sock|fcgi://"
</FilesMatch>

注意:此解决方案适用于 Apache 2.4.9+

(我想知道是否有任何性能差异以及在什么方向上?)

于 2014-10-04T07:20:56.977 回答