所以我有两个要在服务器上运行的应用程序。一个应用程序我想成为“默认”应用程序 - 也就是说,默认情况下,所有 URL 都应该发送给这个应用程序,除了某个路径,让我们称之为/foo
:
http://mydomain.com/ -> app1
http://mydomain.com/apples -> app1
http://mydomain.com/foo -> app2
我的两个机架应用程序是这样安装的:
/var
/www
/apps
/app1
app.rb
config.ru
/public
/app2
app.rb
config.ru
/public
app1 -> apps/app1/public
app2 -> apps/app2/public
(app1
并且app2
是指向其各自应用程序公共目录的符号链接)。这是此处描述的子 URI 的乘客设置:http ://www.modrails.com/documentation/Users%20guide%20Nginx.html#deploying_rack_to_sub_uri
使用以下配置,我/foo
将进入 app2:
server {
listen 80;
server_name mydomain.com;
root /var/www;
passenger_enabled on;
passenger_base_uri /app1;
passenger_base_uri /app2;
location /foo {
rewrite ^.*$ /app2 last;
}
}
现在,我如何让 app1 接收其他所有内容?我已经尝试了以下(放置在location /foo
指令之后),但我得到了一个带有无限内部重定向的 500:
location / {
rewrite ^(.*)$ /app1$1 last;
}
我希望该last
指令能阻止无限重定向,但我想不会。我的/foo
重写仍然有效。而且我还可以去http://mydomain.com/app1
。
有任何想法吗?谢谢!