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

如何配置Django的ALLOWED_HOSTS以支持可变前缀的三级子域名?

配置Django支持三级子域名的ALLOWED_HOSTS

情况1:允许所有后缀为domain.com的子域名(包括二级、三级及以上)

其实你之前用的ALLOWED_HOSTS=['.domain.com']已经能满足需求——Django中,以点开头的域名会匹配所有层级的子域名,不管前面有多少个前缀。也就是说,这个配置不仅支持a.domain.com这类二级子域名,也自动支持a.appointment.domain.com、b.test.domain.com这类三级子域名,甚至更深层级的域名也能匹配。

情况2:仅允许三级子域名(限制为x.x.domain.com格式,不允许二级或四级)

如果你的需求是只允许三级子域名,不希望二级子域名(如a.domain.com)或四级子域名(如x.x.x.domain.com)通过验证,可以使用正则表达式配置ALLOWED_HOSTS(Django 1.10及以上版本支持):

ALLOWED_HOSTS = [
    r'^[a-zA-Z0-9-]+\.[a-zA-Z0-9-]+\.domain\.com$'
]

正则说明:

  • [a-zA-Z0-9-]+:匹配第一个可变前缀(支持字母、数字、连字符,长度至少1位),对应例子中的a、b
  • 第二个[a-zA-Z0-9-]+:匹配第二个可变前缀,对应例子中的appointment、test
  • \.domain\.com:匹配固定后缀,注意正则中点需要用\转义,避免匹配任意字符
  • ^和$:确保整个域名完全匹配,避免出现部分匹配的情况

验证方法

可以通过运行Django项目后用不同域名访问测试,或者在Django shell中使用内置函数验证:

from django.http.request import validate_host

# 测试三级子域名
print(validate_host('a.appointment.domain.com', ALLOWED_HOSTS))  # 应返回True
# 测试二级子域名(情况2下应返回False)
print(validate_host('a.domain.com', ALLOWED_HOSTS))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:48:35