Несоответствия пути 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.