Apache 2.4发生在 .htaccess 之前

Apache 2.4发生在 .htaccess 之前

我的 apache 配置中有以下配置:

<VirtualHost *:80>
    <Directory "/var/www/site.com">
            Options +Indexes +FollowSymLinks +ExecCGI -MultiViews
            AllowOverride All
            DirectoryIndex /index.html /pages/new_homepage.php
            Order allow,deny
            allow from all
            Require all granted
    </Directory>
    <LocationMatch ^(.*\.php)$>
                ProxyPass fcgi://127.0.0.1:9000/var/www/site.com$1
    </LocationMatch>

</VirtualHost>

.htaccess 文件中的内容如下:

RewriteRule ^dir/somephp.php$ /pages/dir/somephp.php [L]

我看到原始请求被传递给 PHP-FPM,而不是 ReWritten 请求。我测试了它,并且“.php”部分被匹配。没有 .php 的其他重写工作正常。

Apache 2.4 文档说“LocationMatch”应该最后处理,并在 Directory 指令之后处理。 http://httpd.apache.org/docs/current/sections.html

还有谁见过这种行为或者有什么建议可以尝试吗?

我正在运行带有 Apache 2.4.6 的 Centos 7。

--更新-- 嗯,我很困惑,嵌套在 LocationMatch 中的 ProxyPass 是否优先于 LocationMatch?我启用了一个使用多个 LocationMatch 语句的讨厌的解决方法:

    <LocationMatch ^(.*\.php)$>
           ProxyPass fcgi://127.0.0.1:9000/var/www/site.com$1
    </LocationMatch>
    <LocationMatch ^(/dir/some.*\.php)$>
            ProxyPass fcgi://127.0.0.1:9000/var/www/site.com/pages$1
    </LocationMatch>
    <LocationMatch ^(/dir2/some.php)$>
            ProxyPass fcgi://127.0.0.1:9000/var/www/site.com/pages$1
    </LocationMatch>

我仍然想弄清楚为什么 Locationmatch 在处理 .htaccess 之前就发送到 php 服务器。

相关内容