Django+Docker环境下浏览器请求自动追加容器内/code路径如何解决
问题原因
该问题的核心是Django生成URL时自动追加了前缀,或是浏览器端有额外的路径拼接逻辑,而curl请求是手动指定完整URL、不受前端配置/缓存影响,所以表现正常。常见触发原因如下:
- Django配置项
FORCE_SCRIPT_NAME被误设为/code:该参数本用于子路径部署场景,配置后Django生成的所有站内URL都会自动携带该前缀 - 前端HTML的
<base>标签配置错误:如果base标签的href属性被设为/code/,浏览器会自动将该路径作为所有相对请求的基准前缀 - 浏览器缓存了旧的301永久重定向规则:之前测试时如果后端返回过跳转到
/code前缀的永久重定向,浏览器会缓存该规则,就算后端修复后仍会自动跳转 STATIC_URL/MEDIA_URL配置为带/code的相对路径:会导致静态资源请求自动拼接前缀
解决方案
按优先级逐一排查修复即可:
- 检查Django
settings.py配置,删除错误配置的FORCE_SCRIPT_NAME = '/code'项,或将其设为空字符串;同时确认STATIC_URL、MEDIA_URL均为以/开头的绝对路径(如STATIC_URL = '/static/') - 检查前端入口HTML的
<head>标签,确认没有<base href="/code/">这类错误配置,将href值改为/即可 - 按
Ctrl+Shift+R强制刷新页面,或开启浏览器无痕模式、清空缓存后重新测试,排除旧重定向缓存影响
内容的提问来源于stack exchange,提问作者renno
相关产品推荐
相关产品推荐

