nginx位置规则干扰

时间:2017-05-20 10:59:53

标签: linux nginx centos nginx-location

我有这个Nginx规则:

location /fr {
  rewrite ^/(fr)(?:/([^/]+))?$ /$2?lang=$1 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 ^(.*)$ $1.php last;
}

1 个答案:

答案 0 :(得分:1)

我建议您将/fr视为特殊情况,并使用location /fr/来避免以fr开头的网页产生副作用。

例如:

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

有关详细信息,请参阅this document