如果 request_uri 以特定 strings/regex 开头(有一些例外),则删除参数 - Nginx
Remove args if request_uri begins with specific strings/regex (with some exceptions) - Nginx
我想重定向 (301) 几个位置,如果它们在没有查询参数的相同位置有查询参数,但有一些例外。
例如,我想要这些位置的行为:
- /bob/marley -> 不重定向
- /bob/marley?query=string -> 重定向到 /bob/marley
- /bob/marley/cat?name=dude -> 重定向到 /bob/marley/cat
- /bob/marley/dog?name=jim -> 重定向到 /bob/marley/dog
- /bob/marley/search?query=string -> 不重定向
如果有几十条这样的规则,我该怎么办呢?也许用 map 指令或其他东西将它组织在单独的文件中?谁能解释一下,好吗?
我想上面例子的答案如下:
http section:
map $request_uri $request_uri_path {
"~^(?P<path>\/bob\/marley\/?(?:(?!\?|search).)*)(\?.*)$" $path;
}
server section:
if ($request_uri_path) {
return 301 $scheme://$http_host$request_uri_path;
}
我想重定向 (301) 几个位置,如果它们在没有查询参数的相同位置有查询参数,但有一些例外。
例如,我想要这些位置的行为:
- /bob/marley -> 不重定向
- /bob/marley?query=string -> 重定向到 /bob/marley
- /bob/marley/cat?name=dude -> 重定向到 /bob/marley/cat
- /bob/marley/dog?name=jim -> 重定向到 /bob/marley/dog
- /bob/marley/search?query=string -> 不重定向
如果有几十条这样的规则,我该怎么办呢?也许用 map 指令或其他东西将它组织在单独的文件中?谁能解释一下,好吗?
我想上面例子的答案如下:
http section:
map $request_uri $request_uri_path {
"~^(?P<path>\/bob\/marley\/?(?:(?!\?|search).)*)(\?.*)$" $path;
}
server section:
if ($request_uri_path) {
return 301 $scheme://$http_host$request_uri_path;
}