所以,如果我有这样的当前设置。
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
这些是我不想重写的网址格式。 some-path
子目录,子locations
子目录以及locations
下的任何内容。
some-path
目录下的所有其他子URL应该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.
关于如何实现目标的想法?
答案 0 :(得分:1)
这是一个糟糕的想法,设计明智。 如果用户错误输入domain.com/some-path/locations/some-location
,根据您的有效,domain.com/some-path/location/some-location
为{{1} },这是无效的,那么他们最终会把所有的打字都搞砸了,他们必须从头开始(或者只是去竞争对手)。
但是,如果你坚持使用正则表达式:
if ($request_uri !~ "^/some-path/($|locations/.*$)") {
return 301 http://domain.com/some-path/;
}
您可能必须在现有的location
中使用此功能,或者将其保留在顶级,具体取决于配置的其余部分,因为只有一个location
可以处理请求。