【问题标题】:How to extract request parameter from $request?如何从 $request 中提取请求参数?
【发布时间】:2019-10-24 14:00:29
【问题描述】:

我想使用正则表达式和map从http块中的$request中提取请求参数(reqId)值 你能帮我解决吗?

示例网址:

test-registration.com/emp/reg?reqId=939393&usrName=Jimmy

我不确定这种情况下的正则表达式是什么,但可能 解决方案就像

http {
    map $request $requestId {
      "regular expression"  $reqId;
    }
}

如果有任何其他解决方案可以解决此问题,请告诉我。 我以为我可以使用 $arg_reqId 但我不确定是否可以在 http 块中使用它。

编辑: 提取 id 后,我想对其应用 sha-256 哈希并将其放回 $request。 所以 $request 的新值应该是这样的:

test-registration.com/emp/reg?reqId=$#&$#&yewywjd3&usrName=Jimmy

谢谢

【问题讨论】:

  • 为什么不直接使用$arg_reqid,不确定它是否区分大小写,如果小写不起作用,请尝试$arg_reqId
  • @TarunLalwani 我需要在 中使用 $arg_reqId 吗?
  • 您的问题未指定您希望如何以及在何处使用此值。一旦你澄清,评论会更容易
  • @TarunLalwani 我想对该 id 进行哈希处理并将其放回 $request
  • 请用一个这样的例子更新您的问题。指定散列的类型以及更新后的请求是什么样的

标签: regex nginx nginx-config


【解决方案1】:

你可以试试这个模式:reqId=([^&]+)

解释:

reqId= - 匹配 reqId= 字面意思

(...) - 捕获组

[^&]+ - 匹配除&之外的一个或多个字符

所需的值将存储在第一个捕获组中。

Demo

【讨论】:

  • 谢谢@Michal .. 所以你的意思是地图块应该像 map $request $requestId { reqId=([^&]+) $reqId; } ?
【解决方案2】:

这个地图块怎么样:

http {
    map $request $requestId {
      "~/emp/reg\?reqId=(?<reqId>[0-9]+)"  /doSomething/$reqId;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    相关资源
    最近更新 更多