将子文件夹重定向到 NGINX 中的不同根目录会导致重定向循环

将子文件夹重定向到 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;
}

我也尝试过从 切换aliasroot,但无济于事。我不太确定下一步该尝试什么。

有人知道什么可能导致重定向吗?(本质上导致循环domain.com/dashboard/dashboard/dashboard(等等)。

更新

好的,按照 Mark 的建议,我已将位置块移至任何 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

答案1

第一次/dashboard/foo遇到这种情况时,处理将停止rewrite,并重定向回/dashboard同一个域,从而形成一个循环。

您的其他应用程序是 Wordpress 安装,这可能与此相关,因为 Wordpress 包含其自己的重写指令,这些指令基本上表示如果任何 URL 未映射到物理文件或目录,则将其传递给 Wordpress。因此,这一点配置出现在 Wordpress 重写规则之前非常重要。

如果我理解正确,并且两个应用程序都在同一个域中,则您不需要rewrite此处的指令。该alias指令足以/dashboard从其他位置提供地址。

答案2

尝试别名反而:

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

相关内容