Nginx 使用 $args 重写以创建带参数的较短 URL

Nginx 使用 $args 重写以创建带参数的较短 URL

我的情况是这样的:

二十多年来,我一直使用以下 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;
}

相关内容