Sitemap.xml работает на разработке, но 404 ошибки на производстве
Я следовал документации, чтобы добавить карту сайта на мой сайт, все отлично работает на разработке, как только я загружаю на производство, у меня 404 ошибка, как sitemap не может быть найден. Я проверил базу данных на продакшене, чтобы убедиться, что SITE_ID совпадает с pk сайта, зарегистрированного в базе данных.
Это мое установленное приложение в settings.py
а это мой urls.py (корневой проект, где находится файл settings.py)
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.contrib.sitemaps.views import sitemap
from django.urls import path, include
from icerd import settings
from icerd.sitemaps import StaticViewSitemap
admin.site.site_header = "ICERD' website Administration"
admin.site.site_title = 'Administration'
admin.site.index_title = 'ICERD'
sitemaps = {
'static': StaticViewSitemap,
}
urlpatterns = [
path('i18n/', include('django.conf.urls.i18n')),
path('admin/', admin.site.urls),
path('sitemap.xml', sitemap, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
path('', include('homepage.urls')),
path('registration/', include('registration.urls')),
path('administration/', include('administration.urls')),
path('reset_password/', auth_views.PasswordResetView.as_view(template_name="password/reset_password.html"),
name='reset_password'),
path('reset_password_sent/',
auth_views.PasswordResetDoneView.as_view(template_name="password/reset_password_sent.html"),
name='password_reset_done'),
path('reset/<uidb64>/<token>',
auth_views.PasswordResetConfirmView.as_view(template_name="password/reset_password_form.html"),
name='password_reset_confirm'),
path('reset_password_complete/',
auth_views.PasswordResetCompleteView.as_view(template_name="password/reset_password_done.html"),
name='password_reset_complete'),
]
if settings.DEBUG:
urlpatterns += static(
settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT
)
а это мой sitemaps.py (также в корне, где находится settings.py)
# sitemaps.py
from django.contrib.sitemaps import Sitemap
from django.urls import reverse
class StaticViewSitemap(Sitemap):
priority = 0.5
changefreq = 'weekly'
def items(self):
return [
'homepage:homepage',
'homepage:get_logo',
'homepage:about_us',
'homepage:login',
'homepage:logout',
]
def location(self, item):
return reverse(item)
После всего этого я запустил миграции, зашел в django admin и заменил 'example.com' в таблице sites.
Если я запускаю тот же код на своем компьютере, все работает нормально, на продакшене не работает. Я использую debian vps для размещения своего сайта, используя nginx и gunicorn.
Попробуйте добавить эту строку в блок вашего сервера nginx
rewrite ^/(.*)/$ /$1 permanent;
Если это поможет, это означает, что ваш браузер пытается получить доступ к "/sitemap.xml/" (не "/sitemap.xml")