Apache的<Directory>块启用ExecCGI必须写Options +ExecCGI(+号不可省略),路径须与ScriptAlias完全一致,2.4+版本需配Require all granted,并同步配置LoadModule和AddHandler。

Apache 的 <Directory> 块必须明确启用 ExecCGI,否则即使脚本路径正确、后缀已注册,也会返回 403 Forbidden 或 500 Internal Server Error。关键不是“加不加”,而是“怎么加、加在哪、配得对不对”。
必须写对 Options +ExecCGI
Options 指令里,+ExecCGI 的加号不能省略。写成 Options ExecCGI 或 Options Indexes FollowSymLinks ExecCGI 都无效——Apache 会忽略它。
- ✅ 正确写法:
Options +ExecCGI(前面带+) - ✅ 推荐组合:
Options +ExecCGI -Indexes +FollowSymLinks(禁用目录列表更安全) - ❌ 错误写法:
Options ExecCGI、Options +execgi(大小写敏感)、Options +ExecCGI +None(冲突)
Directory 路径必须和 ScriptAlias 完全一致
如果用了 ScriptAlias /cgi-bin/ "/opt/lampp/cgi-bin/",那 <Directory> 的路径就必须是 "/opt/lampp/cgi-bin/",一个字符都不能差(包括末尾斜杠、空格、引号闭合)。
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
- Windows 用户注意:路径用正斜杠或双反斜杠,例如
"C:/xampp/cgi-bin/"或"C:\xampp\cgi-bin\" - macOS/Linux 用户注意:路径区分大小写,
/usr/local/var/www/cgi-bin和/usr/local/var/www/CGI-BIN是两个目录 - 路径中不能含中文、空格或特殊符号;若 Python 解释器路径含空格(如
C:Program FilesPython39python.exe),建议重装到无空格路径
权限指令要匹配 Apache 版本
Apache 2.4+(XAMPP 7.4 及以上、macOS Homebrew 安装版、Ubuntu 18.04+ 默认)必须用 Require all granted,旧语法 Allow from all 不生效,会导致 403。
立即学习“Python免费学习笔记(深入)”;
- ✅ Apache 2.4+ 写法:
AllowOverride None
Options +ExecCGI
Require all granted
</Directory>
- ❌ Apache 2.2 及更早(如老版 XAMPP 1.7)才用:
Order allow,deny+Allow from all - 混用新旧语法(比如写了
Require all granted又保留Allow from all)可能引发配置冲突
别漏掉 AddHandler 和 LoadModule 配套项
<Directory> 只管“能不能执行”,不管“认不认识 .py 文件”。这两项必须同步配置:
-
LoadModule cgi_module modules/mod_cgi.so(或cgid_module,但不要两者都启) -
AddHandler cgi-script .py .cgi(注意点号不能丢,.PY或.py2无效) - Windows 下建议额外加一行:
ScriptInterpreterSource Registry,让 Apache 从注册表读取 Python 安装路径

















