在 Django 中使用额外的斜杠重定向 url 的最佳方法?

Posted

技术标签:

【中文标题】在 Django 中使用额外的斜杠重定向 url 的最佳方法?【英文标题】:Best way to redirect url with extra trailing slashes in Django? 【发布时间】:2013-03-28 23:30:53 【问题描述】:

在 django 中将“mywebsite.com///”之类的 url 重定向到“mywebsite.com/”的最佳方法是什么?

我可以在 settings.py 文件中使用与 APPEND-SLASH 相反的设置吗?还是我必须使用

from django.views.generic.simple import redirect_to

并在 urls.py 文件中添加一个 urlpattern?

编辑: 我不想让网页与“mywebsite.com/”相同,而是试图让实际的网址更改为“mywebsite.com/”。很抱歉造成混乱。

【问题讨论】:

你的文件管理器中是否有重写引擎或.htaccess隐藏文件? 【参考方案1】:

如果您想在应用程序级别执行此操作,我会避免创建新的 urlconf 规则,特别是如果它是全局规则。

您可以制作自己的中间件来自动处理此重定向,就像 django 在常用中间件中使用 APPEND_SLASH 设置附加斜线一样,这里是供参考的代码:https://github.com/django/django/blob/master/django/middleware/common.py#L66-80

此外,您可能会发现这篇博文中的解决方案很有用:http://gregbrown.co.nz/code/append-or-remove-slash/

【讨论】:

【参考方案2】:

如果你愿意,你应该在 urls.py 文件中添加一个匹配这个 url 的 url 模式,加上斜线。

每个模式只是一个正则表达式,所以你可以很容易地告诉它匹配带有额外斜杠的任何 url。

urlpatterns = patterns('django.views.generic.simple',
('^your/url/*$', 'redirect_to', 'url': '/your/url/'),
)

通过将 /* 添加到 url 模式,它将匹配 /your/url/ 后面带有任意数量的斜线。

【讨论】:

以上是关于在 Django 中使用额外的斜杠重定向 url 的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

【Django】路由配置:反向解析、重定向

为啥在 URL 中缺少尾部斜杠 (/) 时会发生重定向?

Web.config:使用尾部斜杠将URL输入重定向到URL而不使用尾部斜杠

是否可以从URL创建一个重定向规则,斜杠为没有它的一个?

如何将带有斜杠的 URL 重定向到没有斜杠的相应 URL?

使用始终最后一个斜杠重定向网址的问题