如何管理 Django url 别名重定向?

Posted

技术标签:

【中文标题】如何管理 Django url 别名重定向?【英文标题】:how to manage Django urls alias redirections? 【发布时间】:2017-09-08 10:26:32 【问题描述】:

我想正确设置我的网址,避免像下面的示例那样这样做,因为它会影响我的 Google 索引:

urls.py(错误的方式):

url(r'^virtual-reality/$', views.virtualreality, name="virtual-reality"),
url(r'^virtual-reality$', views.virtualreality, name="virtual-reality"),
url(r'^vr/$', views.virtualreality, name="virtual-reality"),
url(r'^vr$', views.virtualreality, name="virtual-reality"),

如您所见,我希望 vr/vrvirtual-reality/virtual-reality 重定向到同一页面。我的网站上有 30 多个 url,并且像这样进行每个 url 重定向都是有问题的,因为结构在增长。

我没有在我的 Django 站点上使用 Apache,因此无法制定重写规则。 (我在 pythonanywhere(网络服务器:Gunicorn))

在不影响我的谷歌搜索索引并避免将具有相同视图的每个 url 输入到 urls.py 的情况下,在同一视图中重定向所有类型的别名的最佳方法是什么?

【问题讨论】:

请注意,您可以省略最后不带斜线的网址,而改用APPEND_SLASH 【参考方案1】:

最好的方法是使用 django 重定向应用程序https://docs.djangoproject.com/en/1.10/ref/contrib/redirects/,您可以使用它轻松地管理来自管理员的重定向。

【讨论】:

中间件是否有任何订单,因为我刚刚尝试过,当我尝试通过管理面板重定向时它不起作用例如:'/vr/' 到 '/virtual-reality/' 我将它用作我的第一个中间件,它工作得很好。请注意 APPEND_SLASH 设置。 迄今为止最好的解决方案【参考方案2】:

解决斜杠问题的另一种方法是在正则表达式中使用? 标志。

url(r'^virtual-reality/?$', views.virtualreality, name="virtual-reality"),
url(r'^vr/?$', views.virtualreality, name="virtual-reality"),

如果使用 CommonMiddleware,它会添加尾部斜杠并返回带有它的视图(如果在任何 urlpattern 中都找不到没有尾部斜杠的版本)。可以在the documentation看到。

【讨论】:

【参考方案3】:

urls.py 毕竟是 Python

只要写一个合适的数据结构就可以捕获你想要的 并使用循环生成包含 url() 调用的列表。

【讨论】:

以上是关于如何管理 Django url 别名重定向?的主要内容,如果未能解决你的问题,请参考以下文章

Vue路由重定向、别名与导航守卫

如果 url 模式不匹配,Django 如何重定向到 404 页面

cloudfront 重定向到源而不是别名

Django - 从斜杠重定向到非斜杠

如何在 Django 中重定向到外部 URL?

django注册后如何将用户重定向到特定的url?