phpEnv下SSI需手动配置Nginx并禁用PHP压缩:在nginx.conf的location /块内添加ssi on; ssi_silent_errors on; ssi_types text/html;,同时将php.ini中zlib.output_compression设为Off,重启Nginx与PHP服务。

phpEnv 是 Windows 下轻量级的 Nginx + PHP 集成环境,本身不带图形化 SSI 开关,必须手动修改 Nginx 配置并规避 PHP 压缩干扰 —— 否则 <!--# include file="xxx" --> 会直接原样输出,不解析。
确认 phpEnv 使用的是 Nginx 而非 Apache
phpEnv 默认只提供 Nginx + PHP 组合(无 Apache 选项),但需验证:打开 phpEnv 主界面,查看「Web Server」栏是否显示 Nginx;若误装了其他环境或手动替换了服务,SSI 配置逻辑完全不同。Nginx 的 SSI 不依赖模块编译,全靠配置项驱动,这点和 Apache 的 mod_include 有本质区别。
在 nginx.conf 中启用 ssi 并指定作用域
phpEnv 的主配置文件路径通常是 C:\phpEnv\nginx\conf\nginx.conf(具体以你安装路径为准)。关键不是加在全局 http 块,而是要落在处理静态内容的 location 区块内,否则请求被 PHP-FastCGI 拦截后根本不会走到 SSI 解析阶段。
找到类似这样的区块:
立即学习“PHP免费学习笔记(深入)”;
location / {
root html;
index index.html index.htm index.php;
}在其内部添加三行:
ssi on;-
ssi_silent_errors on;(避免出错时页面出现[an error occurred while processing the directive]) -
ssi_types text/html;(若用.shtml后缀则改写为text/shtml)
注意:不要把这三行写在 location ~ \.php$ 里 —— 那里只转给 PHP 处理,SSI 完全不生效。
禁用 PHP 的 zlib.output_compression
这是 phpEnv 下 SSI 最常失效的根本原因:PHP 开启了输出压缩(zlib.output_compression = On),导致 Nginx 收到的是 gzip 后的二进制流,无法识别和替换 SSI 指令。
打开 phpEnv 对应的 php.ini(路径如 C:\phpEnv\php\php-8.2\php.ini),搜索并修改:
- 找到
zlib.output_compression = On→ 改为zlib.output_compression = Off - 顺手检查
output_handler是否为空(不应设为ob_gzhandler等)
改完后必须重启 phpEnv 的「Nginx」和「PHP」服务(仅重载 Nginx 配置不够)。
测试文件后缀与路径写法必须匹配
SSI 不是 PHP,不走 index.php 入口。你要访问的必须是纯静态 HTML 文件(或明确声明为 SSI 类型的后缀),且 include 路径需符合 Nginx 上下文:
- 如果配置了
ssi_types text/html,就用index.html,里面写<!--# include file="/header.html" --> - 如果配置了
ssi_types text/shtml,就必须把文件存为index.shtml,否则 Nginx 根本不触发 SSI 解析 -
file是相对于root目录的物理路径,virtual是相对于 URI 的路径,别混用
最易忽略的一点:phpEnv 默认的 root 是 html 子目录,所以 file="/header.html" 实际读取的是 C:\phpEnv\nginx\html\header.html,不是网站根目录外的任意位置。



















