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

Django 基于环境变量实现URL重定向或禁用的方法

生产环境禁用指定URL的配置方案

完全可以在不修改urls.py中urlpatterns原有配置的前提下实现需求,以下是两种常用的纯配置方案:

方案1:Web服务器层配置(无代码侵入,纯环境配置)

这是最推荐的方式,不需要修改项目代码,直接在生产环境的Web服务配置中添加拦截规则即可,以Nginx为例:

# 匹配所有需要禁用的路由前缀,可自行修改正则规则
location ~ ^/(internal-dev|beta-unreleased|test-feature)/ {
    return 404;
    # 如需返回503状态码则替换为 return 503;
}

注:505状态码语义为HTTP版本不支持,未发布功能建议优先使用404(资源不存在)或503(服务暂不可用),更符合HTTP协议规范

方案2:Django应用层环境变量控制

如果不方便修改Web服务配置,可通过项目环境变量+轻量中间件实现,全程不需要调整原有路由配置:

  • 第一步:在生产环境的环境变量配置文件(如.env)中添加需要禁用的路由列表:
    DISABLED_URLS=/internal-dev/,/beta-unreleased/,/test-feature/
  • 第二步:新增路由拦截中间件,代码示例如下:
import os
from django.http import Http404
# 如需返回503可引入 HttpResponse 类
# from django.http import HttpResponse

class DisabledUrlInterceptorMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # 从环境变量读取禁用路由前缀列表,空值则不拦截任何路由
        self.disabled_prefixes = [i.strip() for i in os.getenv("DISABLED_URLS", "").split(",") if i.strip()]

    def __call__(self, request):
        # 匹配当前请求路径是否属于禁用范围
        for prefix in self.disabled_prefixes:
            if request.path.startswith(prefix):
                raise Http404
                # 如需返回503则替换为 return HttpResponse(status=503)
        return self.get_response(request)
  • 第三步:在settings.py的MIDDLEWARE列表最顶部注册该中间件即可。

不同环境仅需要调整DISABLED_URLS环境变量的值即可,开发环境留空就不会触发拦截规则,完全不需要修改原有路由配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:45:02