我想精确匹配 nginx 位置块中包含逗号的 URL。该链接由两个逗号分隔的 URL 错误地组成,我想重定向到正确的(第一个)URL,而不是返回 404 错误。
这是我首先尝试的:
location = /page_one,page_two {
return 301 https://example.com/page_one;
}
我还尝试用斜线转义逗号\,
,并将其编码为,%2C
并将以上所有内容用双引号引起来。
如果可能的话,我更喜欢精确匹配的解决方案,而不是前缀或正则表达式匹配。
答案1
事实证明,问题不在于逗号,而在于 URL 路径组件中的双斜杠。nginx 将其解释为单斜杠。
一个更好的链接示例如下:
https://example.com/page_one,https://example.org/page_two
在 example.com 上,我现在正在匹配和重定向:
location = /page_one,https:/example.org/page_two {
return 301 https://example.com/page_one;
}
因此,在这种情况下逗号不需要转义,但双斜杠与单斜杠匹配。