如何在Nginx配置文件中更智能地检测位置?

tf7tbtn2  于 2023-05-22  发布在  Nginx
关注(0)|答案(1)|浏览(101)

我尝试使用location来检测当前的语言环境,并在我的Nginx配置文件中传输(重写)请求。
这是一个我的配置:

location /ru 
{
    rewrite ^/ru/(.*)$ /$1?local=ru;
    rewrite ^/ru /?local=ru;
}

因此,我打算将domain.tld/ru/blog更改为domain.tld/blog?locale=ru
但我遇到了一个问题。例如,URL domain.tld/russell会干扰此配置博客。
我希望能够得到更具体的location语法。我想告诉Nginx只运行这个块,如果URL以两个字母的ru路径段开头。
我该怎么做?

ssm49v7z

ssm49v7z1#

要匹配/ru/ru/foo,但不匹配/rufoo,可以使用正则表达式位置。但请注意,正则表达式位置的计算顺序是重要的。

location ~* /ru($|/) { ... }

或者,使用两个位置块:

location = /ru { rewrite ^ /?local=ru; }
location /ru/ { rewrite ^/ru/(.*)$ /$1?local=ru; }

相关问题