如何在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的主要内容,如果未能解决你的问题,请参考以下文章