В моей конфигурации 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
Кто-нибудь еще видел такое поведение или есть предложения попробовать?
Я использую Centos 7 с Apache 2.4.6.
--update - Я запутался, имеет ли ProxyPass, вложенный в LocationMatch, приоритет 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 отправляется на сервер php до обработки .htaccess.