Django+Apache(mod_wsgi)部署遇too many redirects错误求助
Django+Apache(mod_wsgi)部署“过多重定向”问题排查与解决
问题现象
在Linux环境使用Apache+mod_wsgi部署Django项目时,访问http://localhost/app-web/sito/display_config出现“too many redirects”错误;本地通过python manage.py runserver启动开发服务器后,访问http://127.0.0.1:8000/或http://127.0.0.1:8000/display_config均正常,且相同代码在Windows环境部署无此问题。
项目配置信息
项目目录结构
├── db.sqlite3 ├── djangoProject │ ├── asgi.py │ ├── __init__.py │ ├── __pycache__ │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── manage.py └── sito ├── admin.py ├── apps.py ├── __init__.py ├── migrations ├── models.py ├── __pycache__ ├── templates ├── tests.py ├── urls.py └── views.py
sito/urls.py
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('display_config/', views.display_config, name='display_config'), ]
djangoProject/urls.py
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include('sito.urls')), ]
views.py
from django.http import HttpResponse from django.shortcuts import render from django.template import loader from .models import PingAction, Config from . import views def index(request): return HttpResponse("Hello, world.") def display_config(request): config_list = Config.objects.all() template = loader.get_template("display_config.html") context = { "config_list": config_list, } return HttpResponse(template.render(context, request))
Apache httpd.conf配置
WSGIScriptAlias /app-web /mnt/data/Workspace/app/app-web/djangoProject/djangoProject/wsgi.py WSGIPythonHome /mnt/data/Workspace/app/app-web/app-web-env WSGIPythonPath /mnt/data/Workspace/app/app-web/djangoProject <Directory "/mnt/data/Workspace/app/app-web/djangoProject"> <Files wsgi.py> Require all granted </Files> </Directory>
排查与解决方案
1. 修正访问路径
根据Django路由配置,sito.urls已通过根路由path('', include('sito.urls'))挂载到项目根路径下,因此部署后的正确访问路径应为:http://localhost/app-web/display_config
而非http://localhost/app-web/sito/display_config,多余的sito会导致Django无法匹配路由,若存在默认重定向规则则会触发循环跳转。
2. 检查Django settings.py关键配置
- ALLOWED_HOSTS:确保包含部署服务器的主机名或IP,例如:
若未配置该项,Django可能会拒绝请求并触发重定向。ALLOWED_HOSTS = ['localhost', '127.0.0.1'] - SECURE_SSL_REDIRECT:若当前使用HTTP协议访问,将该项设置为
False:
若设为SECURE_SSL_REDIRECT = FalseTrue,Django会强制将HTTP请求重定向到HTTPS,若HTTPS未配置则会导致循环重定向。 - APPEND_SLASH:检查该项是否为
True(默认值),若Apache已处理路径斜杠,可能存在冲突,可尝试暂时设置为False测试。
3. 调整Apache配置
- 禁用目录索引:在Directory块中添加
Options -Indexes,防止Apache自动列出目录内容并触发重定向:<Directory "/mnt/data/Workspace/app/app-web/djangoProject"> Options -Indexes <Files wsgi.py> Require all granted </Files> </Directory> - 检查是否存在其他重定向规则:查看Apache的VirtualHost配置或项目目录下的
.htaccess文件,确认无额外重定向规则导致循环跳转。 - 验证WSGI路径:确保
WSGIScriptAlias和WSGIPythonPath配置的路径正确,Linux环境需注意路径大小写(Windows不区分大小写,Linux区分)。
内容的提问来源于stack exchange,提问作者luna80
相关产品推荐
相关产品推荐

