1

所以如果我有这样的当前设置。

domain.com/some-path/
domain.com/some-path/locations/
domain.com/some-path/locations/some-location
domain.com/some-path/locations/locb
domain.com/some-path/locations/infinite-location-list

这些是我不想重写的 URL 模式。some-path子目录,它的子子目录locations,以及locations.

该目录下的所有其他子 URLsome-path应 301 定向到该/some-path/目录。

我试过这样的事情:

location ~* ^/some-path/(.+)? {

  if ($request_uri !~ "^/some-path/locations/(.*)$") {
    return 301 http://domain.com/some-path/;
  }

}

/some-path/卡在重定向循环中,并/some-path/locations/抛出服务器端 nginx 404。

关于如何实现我的目标的想法?

4

1 回答 1

1

从设计角度来看,这是一个坏主意。 如果用户输入错误domain.com/some-path/locations/some-location,根据您的说法,这是有效的,因为domain.com/some-path/location/some-location无效,那么他们最终将清除所有输入,他们将不得不从头开始(或者可能只是去您的竞争者)。

但是,如果您坚持使用正则表达式:

    if ($request_uri !~ "^/some-path/($|locations/.*$)") {
        return 301 http://domain.com/some-path/;
    }

您可能必须在现有locationlocation.

于 2016-05-03T23:24:37.910 回答