![Nginx 使用 $args 重写以创建带参数的较短 URL](https://linux22.com/image/784514/Nginx%20%E4%BD%BF%E7%94%A8%20%24args%20%E9%87%8D%E5%86%99%E4%BB%A5%E5%88%9B%E5%BB%BA%E5%B8%A6%E5%8F%82%E6%95%B0%E7%9A%84%E8%BE%83%E7%9F%AD%20URL.png)
我的情况是这样的:
二十多年来,我一直使用以下 URL 在旧网站上进行搜索结果:
https://www.example.com/cgi-bin/website.cgi?type=search_result&query=examplequery
https://www.example.com/cgi-bin/website.cgi?type=search_result&query=examplequery&page=72
我想开始使用一个新的、更短的 URL 来搜索结果,如下所示:
https://www.example.com/?q=examplequery
https://www.example.com/?q=examplequery&p=72
如果可能的话,我还希望将旧 URL 永久重定向到新 URL。
这是我在寻找解决方案后尝试过的(这是在 nginx.conf 中的位置块中)。
if ($args ~ "^/?q=val1&p=val2") {
rewrite ^ /cgi-bin/website.cgi?type=search_result&query=$arg_q&page=$arg_p? last;
}
if ($args ~ "^/?q=val1") {
rewrite ^ /cgi-bin/website.cgi?type=search_result&query=$arg_q? last;
}
由于某种原因,这不起作用。我没有收到任何错误。
为了将旧 URL 重定向到新格式,我将使用:
if ($args ~ "type=search_result&query=$val1&page=$val2") {
rewrite ^ /&q=$arg_query&p=$arg_page? permanent;
}
if ($args ~ "type=search_result&query=$val1") {
rewrite ^ /&q=$arg_query? permanent;
}
不确定这是否有效,因为它取决于上述语句,我无法测试。但我没有收到任何错误。
我不确定我是否做错了。如果有人能帮我看一下,我会非常感激。
答案1
我让它工作了!
if ($args ~ "^q=([^&]+)$") {
set $q $1;
rewrite ^ /cgi-bin/website.cgi?type=search_result&query=$1 last;
}
if ($args ~ "^q=([^&]+)&p=(\d+)") {
set $q $1;
set $p $2;
rewrite ^ /cgi-bin/website.cgi?type=search_result&query=$1&page=$2 last;
}