Nginx 可以在不使用“if”指令的情况下重定向或重写以“?”开头的 URL 吗?

Nginx 可以在不使用“if”指令的情况下重定向或重写以“?”开头的 URL 吗?

我从旧的 Joomla 安装中获得了 RSS 源example.com/?format=feed&type=rss。该网站现在使用 Jekyll 构建,并使用新的 URLexample.com/rss.xml作为 RSS 源。

由于 URL 以“?”开头,重写规则对我不起作用。我使用 if 指令让它工作,但是想要避免使用 if

这是我想用重写或重定向替换的有效 if 指令:

if ($args ~ "type=rss") {
rewrite ^ https://example.com/rss.xml? permanent;
}

以“?”开头的 URL 的 if 指令可以用重写或重定向替换吗?

答案1

alexyten 是对的。在这种情况下,没有其他方法可以处理此问题,因为您尝试匹配的内容实际上不是位置的一部分,而是一个 GET 参数。而且,正如 alexeyten 所建议的,我会使用if ($arg_argname = "exact string")。正则表达式既有性能开销,又如果编写不正确,则会导致无法解释的重定向和重写。

例如,如果您想匹配参数format具有值的事实feed,您需要执行以下操作:if ($arg_format = "feed")

相关内容