nginx url 参数重写

nginx url prameter rewrite

我们正在迁移论坛软件,希望保留我们的 link 权益。我正在尝试从

重写 nginx 中的 url
/forum/read.php?1,171967,171967#msg-171967

/forum/discussion/171967

匹配171967个字符串中的哪个并不重要。我试过:

rewrite ^/forum/read.php(.*),([0-9]+),(.*)$ /forum/discussion/ redirect;

和其他几个变体都无济于事。

您尝试捕获的消息编号是查询字符串的一部分,因此不是 rewrite 和 [=12] 使用的 规范化 URI 的一部分=] 指令。有关更多信息,请参阅 this document

如果/forum/read.php在新论坛软件中不是有效的URI,您可以使用精确匹配location来隔离它。

在查询字符串上 运行 正则表达式 的最简单方法是使用 if 块。

例如:

location = /forum/read.php {
    if ($args ~ ,([0-9]+),) {
        return 301 /forum/discussion/;
    }
}

有关 if 的使用请参阅 this caution