Я немного борюсь с конфигурацией 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, без использования правил перезаписи?
Не могли бы вы выложить полную конфигурацию NGINX? Я думаю должно быть что-то вроде этого
location ~ ^/(wiki|w)/ {
root /local/mediawiki;
}
Чтобы рассказать больше, мне нужно понять, как вы передаете скрипты на php.