【问题标题】:Nginx Redirect - Remove a specific query parameter from URLNginx 重定向 - 从 URL 中删除特定的查询参数
【发布时间】:2014-12-10 15:52:45
【问题描述】:

假设我有一个 URL,例如:

http://www.example.com/something.html?abc=one&def=two&unwanted=three

我想删除 URL 参数 unwanted 并保留 URL 的其余部分,它应该如下所示:

http://www.example.com/something.html?abc=one&def=two

相对于其他参数,此特定参数可以位于 URL 中的任何位置。无论如何,重定向都应该起作用。

这可以实现吗?

【问题讨论】:

标签: redirect nginx


【解决方案1】:

你可以这样实现

if ($request_uri ~ "([^\?]*)\?(.*)unwanted=([^&]*)&?(.*)") {
    set $original_path $1;
    set $args1 $2;
    set $unwanted $3;
    set $args2 $4;
    set $args "";

    rewrite ^ "${original_path}?${args1}${args2}" permanent;
}

【讨论】:

  • 很好的答案!实在不想写lua脚本了。
【解决方案2】:

我想做与此类似的事情,这是修改回原始问题上下文的结果(正则表达式基于 Milos Jovanovic 的回答)

if ($request_uri ~ "([^\?]*)\?(.*)unwanted=([^&]*)&?(.*)") {
  set $args $2$4;

  rewrite "^" $scheme://$host$uri permanent;
}

这样我们只设置一个变量,如果更新的 $args 为空,我们就没有不需要的 ?在 url 的末尾,因为服务器会自行处理

【讨论】:

    【解决方案3】:

    另一种方法是重定向客户端。

    当然,它只适用于 GET 或 HEAD,如果请求有正文则无效(即:POST PUT PATCH)

    顺便说一句:在 fbclid 的特定情况下,map 中的第二行不是必需的,因为参数始终附加到 url

    
    map $request_uri $redirect_fbclid {
      "~^(.*)(?:[?&]fbclid=[^&]*)$"         $1;
      "~^(.*)(?:([?&])fbclid=[^&]*)&(.*)$"  $1$2$3;
    }
    
    if ( $redirect_fbclid ) {
      return 301 $redirect_fbclid;
    }
    
    

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 2018-01-16
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多