如何进行重定向并保留查询字符串?

Posted

技术标签:

【中文标题】如何进行重定向并保留查询字符串?【英文标题】:How to make a redirect and keep the query string? 【发布时间】:2012-05-21 03:17:05 【问题描述】:

我想进行重定向并保留查询字符串。 self.redirect 之类的东西加上发送的查询参数。这可能吗?

【问题讨论】:

你想把它放在哪里?在会话中? 我不能只通过 HTTP GET 传递查询参数吗? 当然,我不知道您使用的是哪个框架,但这应该很简单。在直接 http 中,您将发送 301 或 303,并将 Location 标头设置为重定向 url 以及要保留的查询参数。 是的,这就是我想做的,我认为这很简单。我使用 webapp2 和谷歌应用引擎,我将这些标签添加到问题中。 @Wooble 我可以一个一个地尝试参数,但我正在寻找一种方法来将整个查询字符串添加到单行中。我知道我想通过 HTTP GET 获取的参数的名称,并且我想传递它们的值。我认为应该有一种方法可以传递整个地图,而不是一次传递一个变量。 【参考方案1】:
newurl = '/my/new/route?' + urllib.urlencode(self.request.params)
self.redirect(newurl)

【讨论】:

无法在龙卷风 4 中运行 可以在当时的新版本中使用urllib.parse.urlencode(self.request.query_arguments, doseq=True)【参考方案2】:

您可以使用self.request.query_string 获取当前请求的查询字符串;因此,您可以使用self.redirect('/new/url?' + self.request.query_string) 重定向到新的 URL。

【讨论】:

无法在龙卷风 4 中运行【参考方案3】:

这在 Django 2.2 中对我有用。查询字符串可用作 QueryDict 实例 request.GET 用于 HTTP GET 和 request.POST 用于 HTTP POST。将这些转换为普通字典,然后使用urlencode

from django.utils.http import urlencode

query_string = urlencode(request.GET.dict())  # or request.GET.urlencode()

new_url = '/my/new/route' + '?' + query_string

见https://docs.djangoproject.com/en/2.2/ref/request-response/。

【讨论】:

【参考方案4】:

使用RedirectView

from django.views.generic.base import RedirectView
path('go-to-django/', RedirectView.as_view(url='https://djangoproject.com', query_string=True), name='go-to-django')

【讨论】:

以上是关于如何进行重定向并保留查询字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如果表单提交成功并保留在页面上,如何使用js进行重定向

SAML HTTP 重定向绑定中未保留查询字符串

.NET:从域和子文件夹重定向到新域,保留路径和查询字符串,在 web.config 中使用 httpredirect

如何在不保留路径的情况下进行htaccess重定向?

如何根据查询字符串重定向 URL?

Amazon S3 重定向规则 - 保留查询参数