如何在Nginx上获取不带参数的request_uri

时间:2017-08-08 08:33:46

标签: nginx query-string nginx-location

已经有similar question,但我需要建议如何将所需的两个部分组合在一起:

我需要以下结构:

location ~*     {
if ($args ~ *)      {
add_header Link "<$scheme://$http_host$request_uri>; rel=\"canonical\"";
}
}

其中$request_uri必须是非编码网址(不能使用$uri)。如何摆脱args

map $request_uri $request_uri_path {
  "~^(?P<path>[^?]*)(\?.*)?$"  $path;
}

进入我的榜样?

2 个答案:

答案 0 :(得分:1)

我没有找到任何好的正则表达式,所以我想到了这个:

^(?P<path>.*?)(\?.*)*$

您可以在地图中使用

map $request_uri $request_uri_no_parameters {
  "~^(?P<path>.*?)(\?.*)*$"  $path;
}

这是我的测试-https://regex101.com/r/K49bFm/2

答案 1 :(得分:0)

对于那些稍后需要的人:整个上下文如下:

http {
        map $request_uri $request_uri_path {
        "~^(?P<path>[^?]*)(\?.*)?$" $path;
        }

        server {

                location ~* {
                if ($args ~ .) {
                add_header Link "<$scheme://$http_host$request_uri_path>; rel="canonical"";
                               }
                            }

              } 

     }