nginx自带变量只要其中一部分怎么办?

各位大虾好!小虾有事相求

假设我有一个$arg,arg里面有一个字段是state,现在$arg_state取到的值是:/http%3A%2F%2Fdvlshop.lechange.com%2Fproduct-79.html

现在我希望获取http%3A%2F%2Fdvlshop.lechange.com%2Fproduct-79.html (不要前面的反斜杠)  或者是 /product-79.html (不要中间的网站)   请问应该怎么写?

阅读 3.3k
3 个回答

nginx不做逻辑相关的业务,你的需求直接用nginx无法实现。改用lua吧

谢邀!
首先恭喜您已经解决了该问题!白天忙于nextjs + react + 。。。 重构项目,没来得及看!真是抱歉!要想回答该问题,就不得不说一说在浏览器中输入一个URL后都发生了什么?以下是一个大概流程:

  1. 浏览器向DNS服务器查找输入URL对应的IP地址;
  2. DNS服务器返回网站的IP地址;
  3. 浏览器根据IP地址与目标web服务器建立TCP连接;
  4. 发送HTTP请求;
  5. 服务器处理请求;
  6. 返回响应结果;
  7. 关闭TCP连接;
  8. 浏览器解析HTML;
  9. 浏览器布局渲染;

Nginx 是一个高性能的HTTP和反向代理web服务器,而您在http。。。 前面加上一个/,DNS解析不到对应的IP,更不要说建立TCP连接了,所以您在http。。。 前面加上一个/根本到不了nginx这一步。假设真能到nginx这一步,nginx是可以通过正则匹配,重写路由的!

虽然不知道你要干嘛,但是你想获取的这个值,原生nginx确实做不到,像上一位答主说的,nginx不做业务相关逻辑,如果你非要做不可, 在你现有的nginx上安装 lua_module或者直接换成openresty,用lua去实现这块的逻辑。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题