nginx将重写的URL传递给Web服务器

时间:2015-01-10 08:22:53

标签: nginx

我是nginx的新手,我想知道是否有办法将已编辑的请求网址传递给网络服务器。例如,我可能正在运行一个Web服务器(让我们说apache。或者Flask。)。我想要/foo/(.*)$的所有请求都转到我的网络服务器,但我希望我的网络服务器在没有foo的情况下看到它们。但是如果最初的请求没有foo,那么它将完全转移到其他地方。

对/ foo / bar的请求将被路由到我的Web服务器,该服务器只会将请求视为" / bar"。但是,最初是对" / bar"将完全不同地处理。 (所以我不想重定向)。

有没有办法做到这一点?我的想法是我可以使用它来模块化和命名我写的应用程序,在那里我可以编写一个应用程序,好像它是在root上路由请求,但它实际上会埋没在我的网站中。

谢谢!

1 个答案:

答案 0 :(得分:0)

这应该是技巧(未经测试)

location /foo {
    rewrite /[^/](/.*) $1 break;
    # Pass to web server, e.g.:
    #proxy_pass http://127.0.0.1:8080;
}

请注意,重写中的正则表达式将从请求中删除任何子目录;但只有一个子目录。你也可以使用:

rewrite /foo(/.*) $1 break;

哪个更易读,更清晰,但功能更强大。这取决于您和您的正则表达技巧。