You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Django中URL重定向至以'/'结尾的地址?

解决Django中不带尾斜杠URL返回200状态码的方法

你遇到的https://mywebsite.com/fr被重定向到带尾斜杠版本的问题,是Django默认的APPEND_SLASH行为导致的——当请求的URL不带尾斜杠且在URL配置中找不到匹配项时,Django会自动重定向到带尾斜杠的版本并返回301/302状态码。以下是几种直接让不带尾斜杠的URL返回200的方案:

方案1:用正则路径匹配带/不带斜杠的URL

在项目或应用的urls.py中,使用re_path(代替path)定义支持可选尾斜杠的URL规则,两种形式的URL会匹配同一个视图:

from django.urls import re_path
from . import views

urlpatterns = [
    # 正则中的/?表示尾斜杠可选
    re_path(r'^fr/?$', views.your_french_view, name='french-page'),
]

方案2:同时添加带/不带斜杠的路径(冗余但直观)

如果不想用正则,可以直接在URL配置中添加两条路径,指向同一个视图函数:

from django.urls import path
from . import views

urlpatterns = [
    path('fr/', views.your_french_view, name='french-page-with-slash'),
    path('fr', views.your_french_view, name='french-page-no-slash'),
]

这种方法适合少量URL的场景,缺点是需要维护两条规则。

方案3:全局关闭APPEND_SLASH(谨慎使用)

如果希望所有URL都允许不带尾斜杠访问,可以在settings.py中修改配置:

APPEND_SLASH = False

注意:这个设置是全局的,所有未定义不带尾斜杠的URL都会返回404而非重定向。如果网站大部分URL依赖带尾斜杠的规则,不建议使用该方案。

如果你的URL是基于Django国际化(i18n)的语言前缀(比如fr是语言代码),只需在i18n_patterns中应用上述正则匹配方案即可,确保语言前缀后的路径支持可选尾斜杠。

内容的提问来源于stack exchange,提问作者Kalpesh Tawde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:42:18