如何在 nginx 位置块中转义/编码逗号

如何在 nginx 位置块中转义/编码逗号

我想精确匹配 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;
}

因此,在这种情况下逗号不需要转义,但双斜杠与单斜杠匹配。

相关内容