Nginx GET变量重写及内容修改

Nginx GET变量重写及内容修改

我看过相当类似的帖子,但不是我想要的。我正在尝试实现一个 nginx 重写,它应该修改 get 变量的内容。结果总是 404 未找到,我不明白哪里出了问题。更具体地说,我想要:

https://mydomain.tld/resellers/view.php?id=1&url=https://market.tld重写为: https://resellers.mydomain.tld/view.php?id=1&url=101

因此,有 2 处修改:

  1. mydomain 更改为 resellers.mydomain
  2. url 内容更改为数字

我认为应该起作用的配置是:

location ~ /resellers { 
rewrite ^/resellers/view.php?id=1&url=https://market.tld https://resellers.mydomain.tld/view.php?id=1&url=101;
}

因为会有多个链接组合,关于 id 和 url 变量,使用重写映射会更好吗?我的意思是,我希望在为 id 和 url 变量创建规则时要明确,而不是使用通配符,就像在更简单的重写规则中一样。

我希望有人曾经遇到过类似的情况,可以给我一些启发。非常感谢您抽出时间。

答案1

指令的正则表达式rewrite无法匹配 URL 的参数部分。

如果您尝试重定向单个 URI,请使用location =语法。请参阅这个文件了解详情。

假设参数有多个映射url,则map是一个很好的解决方案。请参阅这个文件了解详情。

例如:

map $arg_url $new_url {
    default                0;
    https://market.tld     101;
}

server {
    ...
    location = /resellers/view.php {
        if ($new_url) {
            return 301 https://resellers.mydomain.tld/view.php?id=$arg_id&url=$new_url;
        }

        # URL mapping not found - what to do?
        return 404;
    }
    ...
}

请注意,该map块位于上下文之外server

相关内容