Nginx可否redirect或重写以“?”开头而不使用“if”指令的url?

我有一个来自旧Joomla安装的RSS feed example.com/?format=feed&type=rss 。 该站点现在使用Jekyll构build,并使用新的URL example.com/rss.xml作为RSS提要。

重写规则不适用于我,因为URL以“?”开头。 我有它的工作与if指令,但要避免使用if 。

这里是我想用重写或redirectreplace的工作if指令:

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

可以以“?”开头的URL指令 被重写还是redirect?

alexyten是对的。 在这种情况下,没有其他的方法来处理这个问题,因为你试图匹配的实际上并不是位置的一部分,而是一个GET参数。 而且,正如alexeyten所build议的那样,我将使用if ($arg_argname = "exact string") 。 正则expression式既有性能开销,又有不正确的写入,会导致不明原因的redirect和重写。

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