【问题标题】:Having two ? in a URL - Is it valid?有两个?在 URL 中 - 它有效吗?
【发布时间】:2012-12-30 15:39:31
【问题描述】:

事情是这样的:

假设我有一个这样的基本 URL:

www.mysite.com?my_first_param=1&my_second_param=2

但现在我想在我的 URL 中添加一个新参数:

www.mysite.com?my_first_param=1&my_second_param=2&my_redirect_site=www.myothersite.com

想象一下,我正在使用一项服务,他们将新的跟踪参数添加到我的 URL。例如:

first_tracking=value1&second_value=value2

因为我的 BASE url 已经有一个“?”参数添加了“&”,所以我的最终 URL 如下所示:

www.mysite.com?my_first_param=1&my_second_param=2&my_redirect_site=www.myothersite.com&first_tracking=value1&second_value=value2

这是一个带有多个参数的正确 URL,但是当我重定向到 www.myothersite.com 时,由于参数以“&”开头,它们会丢失。是否正确添加以“?”开头的跟踪参数? ?像这样:

www.mysite.com?my_first_param=1&my_second_param=2&my_redirect_site=www.myothersite.com?first_tracking=value1&second_value=value2

如果不是,那么处理这个问题的好方法是什么?我相信重定向的责任是将跟踪参数传递给重定向 URL。

【问题讨论】:

  • 我认为它不会通过 QueryParams。
  • 我同意,重定向应该通过跟踪参数。

标签: http url standards


【解决方案1】:

你应该正确地对每个参数名称和值进行 URLencode,所以如果你想要的参数映射是这样的:

my_first_param => 1
my_second_param => 2
my_redirect_site => www.myothersite.com?first_tracking=value1&second_value=value2

那么你应该把它作为查询字符串传递:

?my_first_param=1&my_second_param=2&my_redirect_site=www.myothersite.com%3Ffirst_tracking%3Dvalue1%26second_value%3Dvalue2

您应该使用已经执行此操作的库来构建 URI 来为您处理此编码。

【讨论】:

    【解决方案2】:

    不,网址中不能有第二个问号。

    此外,如果您在重定向 URL 中有与号,它们将被视为主 URL 的单独参数,而不被视为连接到重定向 URL。

    如果您想进行这样的重定向,您需要对整个重定向 URL 进行 URLEncode。大多数面向网络的语言都有标准函数可以做到这一点。

    【讨论】:

      【解决方案3】:

      编码参数“?”将被替换为 %3F

      【讨论】:

        【解决方案4】:

        这取决于您对添加跟踪参数的服务的控制程度。 添加参数后可以更改url吗?

        如果可以,那么您应该使用 url 构建器将跟踪参数添加到重定向 url,然后对该 url 进行 url 编码,包括跟踪参数。

        如果您无法控制并且第三方修改了您的 url,那么您必须在重定向时执行此操作,读取 url 中的参数,获取您的重定向 url 和跟踪参数,将跟踪参数添加到重定向前的重定向网址。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-08-24
          • 1970-01-01
          • 2012-05-23
          • 1970-01-01
          • 2011-08-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多