У меня есть сайт, созданный под django-cms
.У меня есть карта сайта, расположенная по адресу www.domainname.com/sitemap.xml
, и сайт, зарегистрированный в базе данных с именем домена, установленным на www.domainnamecom
, и подробным именем, установленным на www.domainname.com
Когда я пытаюсь получить доступ к карте сайта,в большинстве случаев в нем перечислены URL-адреса с правильным корневым URL-адресом (то есть с поддоменом), например, так:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.domainname.com/</loc>
<lastmod>2018-09-11</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.domainname.com/contact/</loc>
<lastmod>2018-09-11</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.domainname.com/methodology/</loc>
<lastmod>2018-09-11</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
</urlset>
Однако в половине случаев он выводится без поддомена, например:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://domainname.com/</loc>
<lastmod>2018-09-11</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://domainname.com/contact/</loc>
<lastmod>2018-09-11</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://domainname.com/methodology/</loc>
<lastmod>2018-09-11</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
</urlset>
То же самое произошло с текущим сайтом, отображаемым на панели инструментов, иногда он включает поддомен, иногда нет.
Обратите внимание, что изначально я ошибочно назвал сайт в бэк-офисе domainname.com
, а потом отредактировал.
Я тут что-то упустил, и мне сложно понять, где искать, поскольку поведение приложения кажется непоследовательным.
Вот мой urlConf:
admin.autodiscover()
urlpatterns = [
url(r'^sitemap\.xml$', sitemap,
{'sitemaps': {'cmspages': CMSSitemap}}),
url(r'^admin/', include(admin.site.urls)), # NOQA
url(r'^', include('cms.urls')),
url('', include('contact_form.urls', namespace="contact_form"))
]
# This is only needed when using runserver.
if settings.DEBUG:
urlpatterns = [
url(r'^media/(?P<path>.*)$', serve,
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
] + staticfiles_urlpatterns() + urlpatterns
И класс CMSSitemap, который я не редактировал:
class CMSSitemap(Sitemap):
changefreq = "monthly"
priority = 0.5
def items(self):
#
# It is counter-productive to provide entries for:
# > Pages which redirect:
# - If the page redirects to another page on this site, the
# destination page will already be in the sitemap, and
# - If the page redirects externally, then it shouldn't be
# part of our sitemap anyway.
# > Pages which cannot be accessed by anonymous users (like
# search engines are).
#
# It is noted here: http://www.sitemaps.org/protocol.html that
# "locations" that differ from the place where the sitemap is found,
# are considered invalid. E.g., if your sitemap is located here:
#
# http://example.com/sub/sitemap.xml
#
# valid locations *must* be rooted at http://example.com/sub/...
#
# This rules any redirected locations out.
#
# If, for some reason, you require redirecting pages (Titles) to be
# included, simply create a new class inheriting from this one, and
# supply a new items() method which doesn't filter out the redirects.
site = get_current_site()
languages = get_public_languages(site_id=site.pk)
all_titles = Title.objects.public().filter(
Q(redirect='') | Q(redirect__isnull=True),
language__in=languages,
page__login_required=False,
page__node__site=site,
).order_by('page__node__path')
return all_titles
def lastmod(self, title):
modification_dates = [title.page.changed_date, title.page.publication_date]
plugins_for_placeholder = lambda placeholder: placeholder.get_plugins()
plugins = from_iterable(map(plugins_for_placeholder, title.page.placeholders.all()))
plugin_modification_dates = map(lambda plugin: plugin.changed_date, plugins)
modification_dates.extend(plugin_modification_dates)
return max(modification_dates)
def location(self, title):
translation.activate(title.language)
url = title.page.get_absolute_url(title.language)
translation.deactivate()
return url
Также не уверен, что это актуально, но я зарегистрировалсямое доменное имя с Namecheap, и я размещен на Heroku, что означает, что я могу указать пустой домен для моего приложения, я должен использовать запись CNAME для www.domainname.com
и запись перенаправления на поддомен для domainname.com
,Обратите внимание, что проблема заключается в том же, когда я обращаюсь к директории поддоменов или через перенаправление с чистого домена
Будучи совершенно новым для django CMS и неудачно новым для Django, я понятия не имею, где искать, чтобы решить эту проблему, любая помощь будет принята с благодарностью!