重写除几个 select 路径之外的所有子目录
Rewrite all sub directories except a few select paths
所以如果我有这样的当前设置。
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
.
下的任何内容
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。
关于如何实现我的目标的想法?
从设计角度来看,这是个坏主意。 如果用户输入错误 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/;
}
您可能必须在现有的 location
中包含它,或者甚至将其保留在顶层,具体取决于您的其余配置,因为只有一个 location
处理给定的请求。
所以如果我有这样的当前设置。
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
.
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。
关于如何实现我的目标的想法?
从设计角度来看,这是个坏主意。 如果用户输入错误 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/;
}
您可能必须在现有的 location
中包含它,或者甚至将其保留在顶层,具体取决于您的其余配置,因为只有一个 location
处理给定的请求。