Несоответствия пути PHP-скрипта в nginx с несколькими корневыми путями сервера
Я немного борюсь с некоторыми настройками nginx. По сути у меня есть одна папка файловой системы (/remote
) который размещает веб-контент на /
но помимо этого я хочу виртуальные пути /w
а также /wiki
который будет размещать экземпляр MediaWiki из совершенно другой папки файловой системы (/local
).
Другими словами, я пытаюсь обработать URL-адреса следующим образом:
/anything.php
-> Беги/remote/anything.php
/wiki/anything
-> Переписать на/w/index.php?title=anything
/w/index.php
-> Беги/local/mediawiki/index.php
Причина этого в том, что я помещаю код MediaWiki во временное хранилище (воссоздаемое при каждой загрузке), но файлы данных (и остальная часть сайта) находятся в постоянном хранилище, поэтому имеют другой путь.
Я получаю путаницу из-за нескольких корневых путей сервера.
Если я сделаю это:
location /w/ {
alias /local/mediawiki;
location ~ [^/]\.php(/|$) {
...
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Затем, согласно документации nginx, запрос /w/blah.php
должен иметь /w
упал так, что он подается из /local/mediawiki/blah.php
, Однако, хотя это может происходить со статическими файлами, это не происходит с файлами FastCGI, потому что SCRIPT_FILENAME
говорит PHP запустить /local/mediawiki/w/blah.php
- не отрубает /w
часть - поэтому PHP FPM возвращает 404, поскольку он не может найти .php
файл.
Вместо этого я попытался использовать rewrite
но это тоже не работает:
location /w/ {
rewrite ^/w/(.*)$ /mediawiki/$1 last;
}
location /mediawiki/ {
internal;
root /local;
...
На этот раз SCRIPT_FILENAME
правильно установлено на /local/mediawiki/blah.php
кроме того, что другие переменные теперь меняются, так SCRIPT_NAME
а также DOCUMENT_URI
становиться /mediawiki/blah.php
вместо /w/blah.php
, что не правильно, поскольку они не относятся к URL-адресам запроса.
Что мне не хватает? Есть ли способ установить SCRIPT_FILENAME
лучше сопоставить файл, который определил nginx, без необходимости использовать правила перезаписи?
1 ответ
Можете ли вы опубликовать полный конфиг NGINX? Я думаю, что это должно быть что-то вроде этого
location ~ ^/(wiki|w)/ {
root /local/mediawiki;
}
Чтобы рассказать больше, мне нужно понять, как вы передаете скрипты в php.