Nginx-301将具有特定GET参数的页面重定向到没有获取参数的同一页面

时间:2019-06-05 07:37:05

标签: nginx redirect url-rewriting

我有

  • 许多页面被搜索引擎用诸如_escaped_fragment_之类的糟糕GET参数索引(有关转义片段的更多信息,请参见更多Yandex man page
  • nginx作为许多不同前端应用程序前面的反向代理

因此,我只需要对所有具有某些GET参数的所有页面进行301重定向到同一页面,而无需任何get参数。例如

example.com/some/long/path?_escaped_fragment_=

应该被重定向到301

example.com/some/long/path

我可以通过在每个前端应用程序中添加此逻辑来做到这一点,或者可以在nginx配置中做到这一点。我更喜欢使用第二种变体。

潜在的解决方案可以包括

1 个答案:

答案 0 :(得分:0)

我已经用这种方式解决了最初的问题

  • 将以下代码添加到我的http context中,以定义请求uri路径,而没有来自$request_uri的参数(此处我们使用map module

    map $request_uri $request_uri_path {
        "~^(?P<path>[^?]*)(\?.*)?$"  $path;
    }
    
  • 将以下代码添加到我的server context中,以将GET参数中带有301 redirect的页面制作为_escaped_fragment_到没有任何GET参数的相同页面(此处我们使用{{3} })

    if ($args ~*  "_escaped_fragment_") {
        rewrite ^ $scheme://$host$request_uri_path? permanent;
    }
    

这对我有用。