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

同一Django站点多域名场景下Sitemap正确生成问题咨询

问题解决方法

出现该问题的核心原因是Django自带的sitemap功能默认读取django.contrib.sites框架配置的固定主域名生成链接,不会自动适配当前请求的访问域名,你可以根据项目需求选择以下两种方案修改:


方案1:关闭sites框架(最简单,适合同一站多域名访问场景)

如果你的项目没有其他功能依赖sites框架,直接关闭即可让sitemap自动适配当前请求域名:

  • 打开项目settings.py,在INSTALLED_APPS列表中删除/注释django.contrib.sites项
  • 删除settings.py中的SITE_ID配置项
  • 重启Django服务生效
    注意:如果项目其他功能依赖sites框架,不要使用该方案,改用方案2

方案2:自定义Sitemap类,动态适配请求域名

如果需要保留sites框架,你可以重写Sitemap的域名获取逻辑:

  1. 新建/打开项目的sitemaps.py文件,定义动态域名Sitemap基类:
from django.contrib.sitemaps import Sitemap as BaseSitemap
from django.contrib.sites.shortcuts import get_current_site

class DynamicDomainSitemap(BaseSitemap):
    def get_urls(self, page=1, site=None, protocol=None):
        # 优先读取当前请求的域名,而非配置的固定站点域名
        if site is None and hasattr(self, 'request'):
            site = get_current_site(self.request)
        return super().get_urls(page=page, site=site, protocol=protocol)
  1. 你自己定义的所有Sitemap子类全部改为继承DynamicDomainSitemap,而非默认的BaseSitemap
  2. 检查所有模型的get_absolute_url方法,不要硬写固定域名,保持相对路径即可
  3. 重启Django服务生效

验证

配置完成后分别访问三个域名的sitemap地址:

  • https://www.example.com/sitemap.xml
  • https://www.example.xyz/sitemap.xml
  • https://www.example.one/sitemap.xml
    确认每个sitemap内的链接前缀和当前访问域名匹配即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:54:01