我正在尝试一些我认为相当简单的事情:即,重定向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
(等等)。
更新
好的,按照 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/;
}