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

如何在Django中将/D/<任意内容>重定向到/d/<任意内容>

Django实现/D/开头URL重定向至/d/的方案

完全可以实现,而且能精准满足你的需求——只匹配以/D/开头的路径(排除/DABC/这类),把包括URL参数在内的所有内容原封不动地重定向到小写/d/开头的对应地址。

具体实现步骤

在项目的根URL配置文件(一般是urls.py)里,按以下方式配置:

  1. 导入必要模块并定义重定向视图
from django.shortcuts import redirect
from django.urls import re_path, path
from django.conf.urls import include
  1. 添加重定向规则(必须放在第三方应用的URL规则之前)
def redirect_upper_d_to_lower(request, path):
    # 完整保留原URL的查询参数
    query_params = request.META.get('QUERY_STRING', '')
    target_url = f'/d/{path}'
    if query_params:
        target_url += f'?{query_params}'
    # permanent=True 表示301永久重定向,适合长期迁移场景;临时重定向可改为False(302)
    return redirect(target_url, permanent=True)

urlpatterns = [
    # 匹配所有以/D/开头的路径,捕获后续所有内容(包括空字符串)
    re_path(r'^D/(?P<path>.*)$', redirect_upper_d_to_lower),
    # 原第三方应用的URL规则,保持不变
    path('d/', include('third_party_app.urls')),
    # 其他项目URL规则...
]

关键细节说明

  • 正则r'^D/(?P<path>.*)$'确保只匹配路径开头是/D/的请求,不会误匹配/DABC/这类不符合要求的地址;(?P<path>.*)会捕获/D/之后的所有内容(包括空字符串,对应/D/重定向到/d/的场景)。
  • 重定向视图会完整保留原URL的查询参数,比如/D/article?id=123会被正确重定向到/d/article?id=123。
  • 把重定向规则放在第三方应用的URL规则之前,是因为Django会按顺序匹配URL,确保大写路径先被捕获并重定向。

和你当前替代方案的对比

你提到的re_path(r"^[dD]/$", include(...))虽然能直接匹配大小写路径,但重定向方案的优势在于:

  • 明确告知搜索引擎和客户端旧地址已迁移,对SEO更友好(尤其是301永久重定向);
  • 不需要修改第三方应用的URL结构,保持原有/d/路径的配置清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:55:19