nginx定位规则干扰

nginx location rule interference

我有这个 Nginx 规则:

location /fr {
  rewrite ^/(fr)(?:/([^/]+))?$ /?lang= last;
}

我有这样的页面:

example.com/en/some-page

example.com/fr/some-page

example.com/fr

...

但我也有一个以 fr:

开头的页面

example.com/free-plan // doesn't work

example.com/fr/free-plan // doesn't work either

如何修改我的 Nginx 规则,使 /fr 规则不干扰我的 free-plan 页面?

Ps:我使用 PHP 和规则来服务没有扩展名的页面:

location / {
  try_files $uri $uri.html $uri/ @extensionless-php;
}

location @extensionless-php {
  rewrite ^(.*)$ .php last;
}

我建议您将 /fr 视为特例并使用 location /fr/ 以避免以 fr.

开头的页面产生副作用

例如:

location = /fr {
    rewrite ^/(.*)$ /?lang= last;
}
location /fr/ {
    ...
}

详情见this document