生成shtml(Server Side Includes HTML)文件需要服务器端解析支持,以下是详细操作指南:
核心原理
shtml通过服务器端包含指令实现动态内容加载,当用户访问时,服务器会解析文件中特定标签(如<!--#include virtual="header.html"-->
),将其他文件内容或系统变量动态插入到HTML中再返回给浏览器。
生成步骤
创建基础文件
新建扩展名为.shtml
的文件(如index.shtml
),写入基础HTML结构:
<!DOCTYPE html> <html> <head>动态页面</title> </head> <body> <!--#include virtual="header.html"--> <main>主内容区</main> <!--#include file="footer.shtml"--> </body> </html>
配置服务器支持
- Apache服务器:
在.htaccess
中添加:Options +Includes AddType text/html .shtml AddOutputFilter INCLUDES .shtml
- Nginx服务器:
在配置文件中启用SSI:server { ssi on; location ~ .shtml$ { ssi_last_modified on; } }
常用指令示例
指令类型 | 代码示例 | 功能说明 |
---|---|---|
文件包含 | <!--#include virtual="nav.html"--> |
插入其他文件内容 |
变量显示 | <!--#echo var="DATE_LOCAL" --> |
显示当前日期 |
条件判断 | <!--#if expr="$HTTP_USER_AGENT = /Mobile/" --> |
设备类型判断 |
设置变量 | <!--#set var="version" value="1.0" --> |
自定义变量 |
创建被包含文件
制作需插入的独立文件(如header.html
),确保路径与shtml中的引用一致:
<!-- header.html --> <header>网站导航栏</header>
关键注意事项
-
服务器支持验证
上传测试文件test.shtml
:<!--#echo var="DATE_LOCAL" -->
若显示当前日期,说明SSI已启用;否则需检查服务器配置。
-
路径规范
virtual
:从服务器根目录开始(/includes/header.html
)file
:使用相对路径(../components/footer.html
)
-
安全限制
- 禁用
exec cmd
等高危指令 - 设置文件权限(被包含文件建议设为644)
- 禁用
-
性能优化
- 对频繁更新的内容启用
ssi_last_modified
- 避免多层嵌套包含(不超过3级)
- 对频繁更新的内容启用
应用场景
- 模块化开发:复用页头/页脚
- :显示访客IP(
<!--#echo var="REMOTE_ADDR"-->
) - A/B测试:通过条件判断展示不同内容
- 维护模式:统一维护公告页面
重要提示:
现代开发中,静态站点生成器(如Hugo/Jekyll)或前端框架(React/Vue)已逐步替代SSI技术,仅在传统服务器环境或特定需求(如无需数据库的简单动态内容)时推荐使用shtml。
验证与调试
- 浏览器中直接查看源码,确认包含指令未被解析(应显示原始标签)
- 服务器错误日志定位问题(如Apache的
error_log
) - 使用在线SSI检测工具(如WebSniffer)
权威参考:
Apache官方文档:Server Side Includes
Nginx官方指南:SSI Module
W3C历史标准:SSI Specification
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/39392.html