鹡鸰不重定向。当 DEBUG = False 时,500 错误而不是 404

Wagtail not redirecting. 500 error instead of 404 when DEBUG = False

那家伙 here 已经问过这个问题并通过删除 500.html404.html 解决了这个问题。

我也一样,当 DEBUGTrue 时,一切都按预期工作:Wagtail 将 / 重定向到 /en,在不存在的页面上它给出 404 等等上。

现在当 DEBUGFalse 时访问 / 它 returns 500 错误没有任何错误(只有 Internal Server Error: /,我有 LOGGING 启用,日志文件也没有错误)。如果我删除 500.html404.html 一切正常,这很奇怪...

urls.py

urlpatterns = [
    # path('django-admin/', admin.site.urls),

    path('i18n/', include('django.conf.urls.i18n')),

    path('admin/', include(wagtailadmin_urls)),
    path('documents/', include(wagtaildocs_urls)),

    path('search/', search_views.search, name='search'),
]


urlpatterns += i18n_patterns(
    path("search/", search_views.search, name="search"),
    path("", include(wagtail_urls)),
)


if settings.DEBUG:
    from django.conf.urls.static import static
    from django.contrib.staticfiles.urls import staticfiles_urlpatterns

    # Serve static and media files from development server
    urlpatterns += staticfiles_urlpatterns()
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

MIDDLEWARE中有'wagtail.contrib.redirects.middleware.RedirectMiddleware',

我还注意到问题出在 404.html,当使用 django 模板时,extendsblock 等。重定向不起作用,如果 404.html 是普通 html - 重定向工作...

在 github 上的 Wagtail 问题中有类似的问题 - #6587。我在 DEBUG = False 时有相同的行为 - Wagtail 在访问“恰好 URL” 时工作,重定向将不起作用。

删除 404 和 500 错误模板在生产中不是很好。有什么解决办法吗?

我建议调查到底是哪个模板标签导致 404.html 模板失败。我的猜测是,当您使用 {% extends %} 引入基本模板时,您的基本模板假设存在诸如 page 之类的变量,这些变量在生成 404 响应时不可用。

在 Wagtail 中,重定向由中间件处理,该中间件在正常页面服务处理 returns 404 时被激活。如果在生成 404 响应的过程中发生错误,则中间件不会将其识别为 404,因此不会发生重定向。