xampp 不支持直接运行 django,硬配 mod_wsgi 高风险;正确做法是用 apache 的 mod_proxy 反向代理至 django 开发服务器,并由 apache 托管静态文件。

XAMPP 本身不支持 Django,硬配 mod_wsgi 是高风险操作,90% 的失败源于 Python 架构(32/64 位)、Apache 版本、VC 运行库三者不匹配。别碰 mod_wsgi.so 编译或下载预编译包——它几乎必然报 Cannot load mod_wsgi.so 或直接导致 Apache 启动失败。
为什么 WSGIScriptAlias 配置后访问 403/500 而不是 Django 页面
这不是路径写错了,是权限和环境没对上:
-
WSGIScriptAlias /myapp /path/to/myapp/myapp/wsgi.py中的路径必须用正斜杠/,Windows 下反斜杠\会导致 Apache 解析失败 -
<directory></directory>块必须精确覆盖wsgi.py所在目录(比如C:/myproject/myproject/),而不是项目根目录;漏掉<files wsgi.py> Require all granted </files>就会 403 -
WSGIPythonPath必须包含项目根目录(即manage.py所在层),否则ImportError: No module named myapp.settings - Django 的
DEBUG = True在 Apache 下可能触发 500(尤其未设ALLOWED_HOSTS),必须改成ALLOWED_HOSTS = ['localhost', '127.0.0.1']
静态文件 404 的真实原因和修复方式
Django 开发服务器能自动服务 /static/,但 Apache 代理或 WSGI 模式下它根本不会转发该路径——你得手动告诉 Apache 哪里找文件:
- 先运行
python manage.py collectstatic --noinput,确保STATIC_ROOT(如./staticfiles/)已生成完整文件树 - 在 Apache 虚拟主机配置中加
Alias /static/ "C:/myproject/staticfiles/",注意结尾斜杠不能少 - 紧接其后加
<directory> Require all granted </directory>,否则 403 - 如果 Django 设置了
STATIC_URL = '/assets/',Alias必须同步改成Alias /assets/ "C:/myproject/staticfiles/",否则所有 CSS/JS 404
比配置更关键:Python 解释器和 Apache 的隐性绑定
Apache 启动时加载的 Python,不是你命令行里 python --version 那个:
-
mod_wsgi编译时绑定了特定 Python 版本(如 py27、py38)和 ABI(VC9、VC14、VC17)。XAMPP 自带 Apache 多为 VC14/VC17,而你装的 Python 可能是 VC15 —— 不兼容 - 32 位 XAMPP + 64 位 Python = 必崩;反之亦然。查法:
httpd.exe -V | findstr ARCH看 Apache 架构,python -c "import platform; print(platform.architecture())"看 Python - 即使强行加载成功,
os.environ在 WSGI 进程中默认为空,DJANGO_SETTINGS_MODULE必须在wsgi.py里显式设置,不能只靠 Apache 的SetEnv
真正卡住人的从来不是“怎么写配置”,而是 Apache 进程看不到你的 Python 环境、wsgi.py 找不到 settings、或者静态路径 Alias 写错一个字符——这些错误在 error.log 里往往只显示一行 client denied by server configuration,没有更多线索。











