xampp 默认不启用 python cgi,关键在于 apache 是否加载 mod_cgi、是否授权 /cgi-bin/ 执行权限、脚本是否有正确 shebang 和合法 http 头;需取消 httpd.conf 中 loadmodule cgi_module 注释,配置 scriptalias 与 块启用 execcgi,添加 addhandler cgi-script .py,并确保脚本无 bom、路径正确、输出头完整。

XAMPP 默认不启用 Python CGI,关键不是“有没有装 Python”,而是 Apache 是否加载了 mod_cgi、是否允许执行 /cgi-bin/ 下的脚本、以及脚本本身能否被正确解析和输出合法 HTTP 头。
确认并启用 mod_cgi 模块
Apache 必须加载 CGI 支持模块,否则所有 .py 请求都会被当作静态文件或直接 404/500。XAMPP 8.2+ 默认启用 mod_cgi,但常被注释掉。
- 打开
xampp\apache\conf\httpd.conf - 搜索
LoadModule cgi_module,确保这行未被注释(即开头没有#);若看到的是cgid_module,也需启用(多进程 CGI 场景) - 若该行完全不存在,说明你的 XAMPP 版本可能精简了模块,需手动补全:
LoadModule cgi_module modules/mod_cgi.so
配置 ScriptAlias 和 cgi-bin 目录权限
仅靠 ScriptAlias 不足以让脚本可执行——Apache 还要明确授权该目录运行 CGI 程序。
- 确认存在类似这行的配置(路径需与你实际 XAMPP 安装位置一致):
ScriptAlias /cgi-bin/ "D:/xampp/cgi-bin/" - 紧接着必须有对应的
<directory></directory>块,且包含:Options +ExecCGI和Require all granted(XAMPP 8.2+)或Order allow,deny+Allow from all(旧版) - Windows 下无需
chmod,但若你在 WSL 或 Linux 版 XAMPP 中运行,chmod a+x hello.py是必须的
Python 脚本的 shebang 和输出格式必须严格合规
常见 500 错误几乎都源于脚本头缺失、BOM、空行或编码问题,而非 Python 本身没装好。
- 第一行必须是有效的 shebang,指向你系统中真实存在的 Python 解释器,例如:
#!/D:/Python39/python.exe(Windows)或#!/usr/bin/env python3(Linux/macOS);用where python(Win)或which python3(Linux/macOS)确认路径 - 第二行建议加编码声明:
# -*- coding: utf-8 -*- -
print("Content-type: text/html")和print()必须成对出现,且print()后不能有任何空行或额外字符(包括 UTF-8 BOM) - 脚本保存为无 BOM 的 UTF-8 格式(Notepad++ → 编码 → 转为 UTF-8 无 BOM)
注册 .py 文件类型并测试访问路径
Apache 默认只把 .cgi 当作可执行 CGI 文件,.py 需显式关联 handler。
- 在
httpd.conf中找到AddHandler区域,添加:AddHandler cgi-script .py - 把脚本放到
xampp/cgi-bin/目录下(不要放错成htdocs!) - 浏览器访问:
http://localhost/cgi-bin/hello.py—— 注意 URL 中是/cgi-bin/,不是/htdocs/cgi-bin/ - 如果返回 500,立刻查看
xampp\apache\logs\error.log,里面通常会写明 “End of script output before headers” 或 “Permission denied”,比浏览器提示有用得多
最容易被忽略的是:shebang 路径写错、脚本保存带 BOM、print() 后多了一个空行、或者把脚本放到了 htdocs 下却用 /cgi-bin/ 访问 —— 这些细节一错,整个 CGI 就卡死在头输出阶段,毫无回旋余地。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











