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

Перенаправление подпапки в другой корень в NGINX дает цикл перенаправления

Я пытаюсь сделать то, что, как мне казалось, будет довольно простым: а именно перенаправить domain.com/dashboard/ в другое (отличное) приложение, отличное от моего основного домена (это установка Wordpress, но я думаю, что это не имеет значения).

Так что при посещении domain.com/dashboard/anywhere, это второе приложение должно действовать так, как если бы /dashboard/ был маршрутом домена и обрабатывать все URL-адреса и т. д. как обычно.

То, что я пробовал до сих пор, либо просто вызывает цикл перенаправления, либо вообще не маршрутизирует, либо дает ошибку 500.

Вот пример моего местоположения nginx для этого:

location ~ ^/dashboard/
{
   alias /srv/www/htdocs/fork/; // this is the second application I want to access

   rewrite "^(/.*)$"      http://domain.com/$1 permanent;

   index index.php index.html;

   include /etc/nginx/fastcgi_params;

   fastcgi_pass  127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;

   break;
}

Я пробовал переключиться с alias к root тоже, но безрезультатно. И я не совсем уверен, что попробовать дальше.

Кто-нибудь знает, что может вызвать перенаправление? (По сути, вызывая петлю domain.com/dashboard/dashboard/dashboard (и т.д).

Обновить

Итак, следуя совету Марка, приведенному ниже, я переместил блок местоположения над всеми правилами wordpress и закомментировал некоторый код. Был достигнут прогресс в том, что теперь просьба domain.com/dashboard/ получит доступ к нужному приложению, но теперь ищет в этом приложении dashboard папка.

Вот текущий код:

location ~ ^/dashboard(/)(.*)$
{
   root /srv/www/htdocs/fork/;

   break;
}

и текущая ошибка в журналах "/srv/www/htdocs/fork/dashboard/index.php" is not found (то, что мне нужно, это доступ /srv/www/htdocs/fork/index.php.

Пытаться псевдоним вместо:

location /dashboard {
  # you don't need regexps here, naming location will use hash lookup which is much faster
  alias /srv/www/htdocs/fork/;
}

В первый раз, когда /dashboard/foo попадает, обработка сводится к rewrite строка, где он останавливает обработку и перенаправляет обратно на /dashboard в том же домене, создавая цикл.

Возможно, уместно, что ваше другое приложение является установкой Wordpress, потому что Wordpress включает в себя собственные директивы перезаписи, которые в основном говорят, что если какой-либо URL-адрес не отображается на физический файл или каталог, то передайте его в Wordpress. Поэтому важно, чтобы этот фрагмент конфигурации появился перед правилами перезаписи Wordpress.

Если я правильно понимаю ситуацию и оба приложения находятся в одном домене, вам не нужен rewrite директива здесь. В alias директивы должно быть достаточно, чтобы служить /dashboard адрес из другого места.