Назад | Перейти на главную страницу

Несоответствия пути PHP-скрипта на nginx с несколькими корневыми путями сервера

Я немного борюсь с конфигурацией nginx. По сути, у меня есть одна папка файловой системы (/remote), на котором размещен веб-контент /, но вдобавок мне нужны виртуальные пути /w и /wiki в котором будет размещен экземпляр MediaWiki из совершенно другой папки файловой системы (/local).

Другими словами, я пытаюсь обрабатывать URL-адреса следующим образом:

Причина этого в том, что я помещаю код 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.