Django生产环境URL无法自动追加尾斜杠问题求助
Django 生产环境下无尾斜杠URL返回404而非重定向问题
我使用Django==4.2.3开发网站,本地环境访问http://127.0.0.1:8000/calculators时,会自动重定向到带尾斜杠的http://127.0.0.1:8000/calculators/,这是正常的。但在生产服务器中,访问https://example.com/calculators直接返回404错误,没有自动重定向到https://example.com/calculators/。
我没有手动设置APPEND_SLASH,因为它的默认值已经是True。
中间件配置
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', "whitenoise.middleware.WhiteNoiseMiddleware", "django_browser_reload.middleware.BrowserReloadMiddleware", 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
URL配置
calculators/urls.py
from django.urls import path from .views import * urlpatterns = [ path('', CalculatorsView.as_view(), name='calculators'), path('stripe-fee/', StripeFeeCalculator.as_view(), name='stripe_fee_calculator'), path('fiverr-fee/', FiverrFeeCalculator.as_view(), name='fiverr_fee_calculator'), ]
project/urls.py
urlpatterns = [ ... path('calculators/', include('calculators.urls')), ... ]
已解决方案
虽然不清楚两者的关联,但修改自定义的404和500视图函数后问题得到解决:
修改前的错误代码
def page_not_found(request, exception): return render(request, 'pages/404.html', {}) def server_error(request): return render(request, 'pages/500.html', {})
修改后的正确代码(添加状态码)
def page_not_found(request, exception): return render(request, 'pages/404.html', {}, status=404) def server_error(request): return render(request, 'pages/500.html', {}, status=500)
注:未手动设置APPEND_SLASH=True,仅通过上述修改解决了问题!
内容的提问来源于stack exchange,提问作者mohsin
相关产品推荐
相关产品推荐

