如何在nginx中使用参数重定向url

Posted

技术标签:

【中文标题】如何在nginx中使用参数重定向url【英文标题】:How to redirect url with parameters in nginx 【发布时间】:2016-11-25 20:32:23 【问题描述】:

例如,我想从https://www.example.com/$pid.txt 重定向到http://www.anotherExample.com/api?pid=$pid 如何在nginx中配置它? 在此先感谢:)

【问题讨论】:

看到这个lethain.com/rewriting-parameterized-urls-with-nginx How to redirect a url in NGINX的可能重复 【参考方案1】:

试试这个:

server 

  listen 443;
  server_name www.example.com;

  location ~* ^/(.+)\.txt$ 
    return 301 http://www.anotherexample.com/api?pid=$1;
  


如果您的 pid 具有特定格式(例如只有数字),则将 (.+) 替换为适当的模式。

如果您想在不重定向的情况下显示内容,请将return 301 替换为proxy_pass

【讨论】:

我使用位置 ~ ^/([^/.]*).txt$ return 301 anotherexample.com/api?pid=$1; 但它说 502 错误,并且在 error.log 中找不到任何有用的东西,知道吗? @NingLv 测试 - 正则表达式在我的环境中工作正常。您是否添加了 https 参数?先试试http://listen 80; @NingLv 你也可以尝试转义反斜杠:\/ 而不是/。这取决于 nginx 版本 @NingLv 请让我知道你什么时候可以开始工作配置。或者只是更新这个答案。这可能对其他人有帮助 为了比较,使用 server listen 443; server_name www.anotherexample.com;位置 ~ ^/([^/.]*).txt$ proxy_pass anotherexample.com/api?pid=$1; 仍然会报 502 错误,如果我不使用正则表达式, location /123.txt proxy_pass anotherexample.com/api?pid=123;并且它工作正常,我改变了另一个正则表达式,仍然不起作用。很困惑...为什么正则表达式不能在我的 nginx 上工作?【参考方案2】:

最好的方法是使用return 301,它将请求重定向到您设置的站点,也许最好使用return 301 $scheme://www.anotherexample.com/api?pid=$1;,这样当您使用时,您的URL将被重定向为HTTPS购买并安装 SSL

【讨论】:

我使用位置 ~ ^/([^/.]*).txt$ return 301 anotherexample.com/api?pid=$1; 但它说 502 错误,并且在 error.log 中找不到任何有用的东西,知道吗?

以上是关于如何在nginx中使用参数重定向url的主要内容,如果未能解决你的问题,请参考以下文章

如何在nginx创建临时重定向和永久重定向

在 nginx 中 URL 重定向到非 http url

如何使用 post 参数重定向到外部 URL?

nginx-80重定向443

nginx如何将url重定向到特定页面

如何在 nginx 服务器上做 301 重定向