У меня ситуация с пользователем Apache 2.4, PHP-FPM и Wordpress Multi в режиме подпапки.
Все файлы, отличные от * .php, нормально работают в подпапке, как и основной URL-адрес example.com/subblog/, однако все, что содержит .php, например example.com/subblog/wp-login.php, не работает с File Not Found из PHP-FPM.
Файл mod_rewrite:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [PT]
RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [PT]
RewriteRule . index.php [PT]
Это в основном рекомендуемый файл, но с некоторыми [L] заменены на [PT], чтобы попытаться заставить его работать должным образом.
PHP-FPM вызывается с помощью:
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:21358/home/northest/public_html/$1
Итак, PHP-FPM пытается загрузить example.com/subblog/wp-login.php (которого не существует), когда mod_rewrite должен изменить его на example.com/wp-login.php (который существует).
Я читал, что PT следует использовать, чтобы позволить ProxyPassMatch забрать перезапись, но все еще кажется, что ProxyPassMatch выполняется до того, как mod_rewrite до него доберется. Я включил отладку mod_rewrite, и она не выводила отладочную информацию для файлов * .php.
Какое здесь решение, чтобы он всегда обрабатывал правила mod_rewrite до ProxyPassMatch?
Решение найдено. Чтобы заставить его работать, мне пришлось несколько изменить правила перезаписи и включить их в конфигурационный файл Apache не через .htaccess.
Apache также начал пытаться переписать index.html в конец всех папок, которые требовали изменения DirectoryIndex, чтобы index.php был в начале.
Наконец, все правила перезаписи должны быть абсолютными с добавленным DOCUMENT_ROOT и перезаписаны, начиная с /
DirectoryIndex index.php index.html
RewriteEngine On
RewriteRule ^index\.php$ - [L]
# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^/[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) /$1 [PT]
RewriteRule ^/[_0-9a-zA-Z-]+/(.*\.php)$ /$1 [PT]
RewriteRule . /index.php [PT]