如何使用 Django HttpResponseRedirect 提供规范 URL



这个问题与我刚刚问的问题非常相似:我可以让谷歌搜索结果使用/显示最终的重定向网址吗?但现在这个问题是特定于Django的。

"我的网站"具有使用以下格式的网页 URL:

www.mysite.com/id/pretty_title

首页链接到这些页面,但 href 实际上包含一些参数:

 www.mysite.com/id/?some_ugly_parameters_to_let_me_know_what_search_it_is_from

然后重定向到

www.mysite.com/id/pretty_title

显示页面。

我的问题是谷歌的搜索结果将指向该页面的链接显示为丑陋的网址,而不是漂亮的重定向网址。

我学到的是,我需要提供一个规范的链接。但是,当丑陋的 url 页面从未真正存在时,我该怎么做,至少不是我写的页面?

服务器端发生的事情是丑陋 url 的视图执行重定向:

return HttpResponseRedirect(pretty_url)

我认为这是您正在寻找的正确构建模板标签。 {{ request.build_absolute_uri }}

你可以

把它作为从 Django 模板返回的 HTML 的一部分,放在<head>部分。你的 Django 中有base.html吗?您可以将{% block %}设置为规范网址的占位符,然后在{% extends base.html %}的每个单独网页中设置该值

基地.html

<html>
<head>
  <link rel="canonical" href="{% block canonical_url %}{% endblock %}">
</head>
...
如果

(1) 您希望您的www子域成为规范域名,并且 (2) 请求路径中有 URL 参数,则许多这些建议的解决方案都存在问题。

我实际上建议在基本模板中对其进行硬编码并附加request.path.

<link rel="canonical" href="https://www.example.com{{ request.path }}">

如果您最终想要使用 build_absolute_uri ,我会在您的视图中执行以下操作(或者您可以创建一个模板函数):

canonical_url = request.build_absolute_uri(request.path)

调用不带参数的build_absolute_uri()将调用request.get_full_path()并将其附加到您的域中。 如果用户通过 https://www.example.com/?param=123 找到您的网站,您的规范网址将包含该参数。

相关内容

  • 没有找到相关文章

最新更新