如何实现Django网站www域名到非www域名的正确重定向
Django 从www域名重定向到非www域名配置方法
你之前安装的django-redirect-to-non-www不生效,绝大多数情况是中间件配置顺序错误,按下面的方法排查配置即可,也可以选择不依赖第三方库的原生实现,或者性能更好的Web层重定向方案。
方案1:修复第三方库配置
- 打开项目下的
settings.py,找到MIDDLEWARE配置列表,必须将redirect_to_non_www.middleware.RedirectToNonWww放在列表的第一个位置。Django中间件按从上到下的顺序执行,如果该中间件前面有其他拦截请求的逻辑,重定向规则根本不会触发。 - 检查
settings.py中是否存在PREPEND_WWW = True的配置,若有需要改成PREPEND_WWW = False,避免和第三方库的规则冲突。 - 确认
ALLOWED_HOSTS配置同时包含带www和不带www的两个域名,例如ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com']。 - 注意该中间件在
DEBUG = True的本地开发环境默认不生效,本地测试需要临时关闭DEBUG模式,或者直接部署到测试环境验证。 - 配置修改完成后重启Django服务,清空浏览器缓存后再测试,301重定向会被浏览器强缓存,很容易出现配置改了但还是跳旧地址的情况。
方案2:Django原生中间件实现(无第三方依赖)
不想依赖第三方库的话,自己写10行左右的中间件就能实现,逻辑可控不会出现未知兼容问题:
- 在你的任意一个业务app目录下新建
middleware.py文件,写入以下代码:
from django.http import HttpResponsePermanentRedirect class NonWwwRedirectMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): host = request.get_host() # 识别带www前缀的请求 if host.startswith('www.'): no_www_host = host[4:] # 保留原请求的路径、参数,做永久重定向 redirect_url = f"{request.scheme}://{no_www_host}{request.get_full_path()}" return HttpResponsePermanentRedirect(redirect_url) return self.get_response(request)
- 回到
settings.py的MIDDLEWARE列表,把你刚写的中间件路径放到列表第一个位置,格式为'your_app_name.middleware.NonWwwRedirectMiddleware',替换成你自己的app名即可。 - 同样保证
ALLOWED_HOSTS包含两个域名,重启服务就生效。
方案3:Nginx层重定向(生产环境优先选)
如果生产环境用Nginx做反向代理,直接在Nginx层配置重定向是最优方案,请求不需要走到Django业务逻辑,性能最高,也不会受Django代码改动影响:
- 打开Nginx对应的站点配置文件,单独新增一个server块用来监听带www的域名:
server { listen 80; listen 443 ssl; server_name www.yourdomain.com; # 和主站保持一致的SSL证书配置,否则HTTPS访问会报证书错误 ssl_certificate /path/to/your/fullchain.pem; ssl_certificate_key /path/to/your/privkey.pem; # 301永久重定向到非www域名,保留原请求路径 return 301 $scheme://yourdomain.com$request_uri; }
- 原来的主服务server块只保留不带www的域名配置:
server_name yourdomain.com; - 执行
nginx -t检查配置无语法错误后,执行nginx -s reload重载配置即可生效。
注意:测试重定向规则的时候,建议先把301永久重定向改成302临时重定向,确认跳转逻辑完全正确后再换回301。301重定向会被浏览器本地长期缓存,一旦规则配错,后续修正后用户侧可能要很久才能更新缓存。
内容的提问来源于stack exchange,提问作者WebMi Digital
相关产品推荐
相关产品推荐

