Django站点地图间歇性www

时间:2010-05-28 09:56:47

标签: xml django sitemap no-www

我的Django网站的自动站点地图在网址上包含www并将其删除之间波动(我的目标是始终拥有它)。这在谷歌没有正确索引我的网页的后果,所以我试图缩小导致这个问题的原因。

我已设置PREPEND_WWW = True,并且我在网站框架中的网站记录设置为包含www,例如它设置为www.example.com而不是example.com。我正在使用memcached但是页面应该在48小时后从缓存中过期,所以我不会想到这会导致问题吗?

您可以在http://www.livingspaceltd.co.uk/sitemap.xml看到有效的问题(刷新页面几次)。

我的站点地图设置相当平淡无奇,所以我怀疑这是问题所在,但万一这是显而易见的,我在这里缺少代码:

***urls.py***

sitemaps = {
    'subpages': Subpages_Sitemap,
    'standalone_pages': Standalone_Sitemap,
    'categories': Categories_Sitemap,
}

urlpatterns = patterns('',
    (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
    ...

***sitemaps.py***

# -*- coding: utf-8 -*- 
from django_ls.livingspace.models import Page, Category, Standalone_Page, Subpage
from django.contrib.sitemaps import Sitemap

class Subpages_Sitemap(Sitemap):
    changefreq = "monthly"
    priority = 0.4
    def items(self):
        return Subpage.objects.filter(restricted_to__isnull=True)

class Standalone_Sitemap(Sitemap):
    changefreq = "weekly"
    priority = 1
    def items(self):
        return Standalone_Page.objects.all()

class Categories_Sitemap(Sitemap):
    changefreq = "weekly"
    priority = 0.7
    def items(self):
        return Category.objects.all()

3 个答案:

答案 0 :(得分:0)

这可能是我见过的最奇怪的问题之一。但问题是Django在站点地图中构建URL的方式非常简单。它只是从数据库获取当前对象并将“域”字段的值附加到页面的相对位置:

current_site = Site.objects.get_current()
...
loc = "http://%s%s" % (current_site.domain, self.__get('location', item))

(source)

您确定在数据库级别上没有做任何奇怪的事吗?如果您有多个镜像数据库,但它们不一致,则可能产生类似的效果。尝试设置仅显示Site.objects.get_current()的测试视图。它也可能会波动。

如果您使用任何第三方缓存应用程序(如Johnny缓存),请尝试将其关闭。

另外,请确保您没有两个Site对象 - 一个有,一个没有www(它不应该给你类似的效果,但有多个服务器实例,为不同的SITE_ID配置......也许?)

答案 1 :(得分:0)

嗯,看起来它毕竟是一个缓存错误 - 我不太确定是不是错了,因为我在一周前做了这些修改,所以它的行为不正确我不得不尝试一些不同的方法来重新启动它。所以这需要进行更深入的调查,但它现在正在发挥作用。

答案 2 :(得分:0)

settings.py中的

PREPEND_WWW = True必须出现在缓存变量设置上方。这解决了我的问题,这与你的问题是一样的。当我在谷歌网站管理员工具中提交我的站点地图时,我遇到了同样的问题。