【问题标题】:Using $args in nginx rewrite causing duplicate URL parameters在 nginx 重写中使用 $args 导致重复的 URL 参数
【发布时间】:2014-07-01 08:39:03
【问题描述】:

在我的位置规则之一中,我正在尝试这样重写 URL:

rewrite ^ $topicredirecturi?$args permanent;

$topicredirecturi 在映射文件中计算,例如映射一个 URL,例如

http://www.topics.com/companies/cit-group-inc/index.html

http://www.topics.com/companies/cit_group_inc/index.html

当我使用以下 URL 参数提出请求时:

http://www.topics.com/companies/cit-group-inc/index.html?rss=1

我得到以下带有重复参数的重写 URL:

http://www.topics.com/companies/cit_group_inc/index.html?rss=1&rss=1

同样,网址

http://www.topics.com/companies/cit-group-inc/index.html?rss=1&bob=2

被重写为

http://www.topics.com/companies/cit_group_inc/index.html?rss=1&bob=2&rss=1&bob=2

有人知道这里会发生什么吗?

【问题讨论】:

    标签: nginx rewrite query-string


    【解决方案1】:

    如果重写后的 URL 中还有其他 get 参数,Nginx 会自动附加查询字符串。如果您自己添加 $args,则应在重写后的 URL 末尾添加 ?(问号)以避免重复参数。

    使用查询字符串进行重定向的正确方法是:

    rewrite ^(...)$ /destination$is_args$args? [permanent|redirect];
    

    其中$is_args 包含? 且仅当查询字符串不为空,而$args 是查询字符串本身;末尾的问号请求 nginx 不再添加查询字符串。

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 2014-02-18
      • 2012-10-12
      • 2016-11-23
      • 1970-01-01
      • 2021-12-08
      • 2019-05-02
      • 1970-01-01
      相关资源
      最近更新 更多