You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,例如:
    ALLOWED_HOSTS = ['localhost', '127.0.0.1']
    
    若未配置该项,Django可能会拒绝请求并触发重定向。
  • SECURE_SSL_REDIRECT:若当前使用HTTP协议访问,将该项设置为False:
    SECURE_SSL_REDIRECT = False
    
    若设为True,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:17:12