如何在Nginx反向代理中删除传入URL的部分路径?

dz6r00yl  于 2023-05-16  发布在  Nginx
关注(0)|答案(1)|浏览(1135)

这是我的要求。我需要检查每个传入的请求,看看它是否以有效的locale(lang)开头,如果是,我需要将其从路径中删除,并将其添加为HTTP头字段并传递请求。
有效语言的列表是动态的。例如,网站可能支持enfrru。默认语言在URL中没有前缀。例如example.tld/blog。对于这个URL,我只需将Locale: en添加到HTTP请求头字段中并传递请求。
但是对于像example.tld/fr/blog这样的链接,我需要将其转换为example.tld/blog,并将Locale: fr添加到HTTP请求的头字段中,然后传递请求。
换句话说,我想知道Nginx反向代理中的语言,并以另一种形式将其传递给上游服务器。
我不知道我该怎么做。可以在Nginx中实现吗?你能指引我正确的道路吗?

c86crjj0

c86crjj01#

Nginx需要识别带有 locale 前缀的URL和没有前缀的URL之间的区别。在下面的示例中,第一个路径元素恰好由两个字符组成的任何URL都将被视为包含前缀。
对于您的要求来说,这可能太宽泛了,在这种情况下,您需要根据需要调整正则表达式。
例如:

location / {
    rewrite ^/(?<locale>\w\w)(/.*)$ $2 break;
    proxy_set_header Locale $locale;
    proxy_pass http://example.com;
}

在匹配包含 locale 的模式的URL上,rewrite...break语句将删除前缀将命名捕获设置为其值。

相关问题