Nginx 根据特定参数匹配进行重写

Nginx 根据特定参数匹配进行重写

我正在尝试在 nginx 中实现重定向,只有当存在特定参数和值对时才会发生重定向。

例如 :https://www.mywebsite.com/search?abc=453?hjh=7484?foo=bar?joe=blah

仅当 request_uri 中存在 hjh=7484 时才应代理到应用程序。这可以位于整个 URL 中的任何位置,也就是说其位置并不固定。

如果针对搜索页面的传入请求没有 hjh=7484,则请求应重定向到https://www.mynewwebsite.com/

我曾尝试过

    location ~* /search(.*)?hjh=7484(.*)?$ {
    proxy_pass $my_app;
}

以上以 404 结尾。

2019/01/21 15:48:47 [错误] 113#113:*109 open()“/usr/share/nginx/html/search”失败(2:没有此文件或目录),

如果我改变上述正则表达式并允许任何对搜索页面的请求传递它就可以工作了!

答案1

location匹配 URI 路径组件。它不匹配查询字符串。

您可以检查参数的值,例如:

location /search {
    if ($arg_hjh = 7484) {
        proxy_pass @my_app;
    }
    # do something else
}

答案2

我能够使用这里发布的方法来实现这一点nginx 位置块可以匹配 URL 查询字符串吗?

error_page 419 = @searchquery;

if ($args ~ "(^|&)hjh=7484" ) {
    return 419;
}

location @searchquery {
    proxy_pass $my_app;
}

现在的问题是,任何带有该参数的请求(不仅仅是搜索页面的请求)都将被处理。最好的方法是什么使其仅限于 /search 位置?

相关内容