什么是 SHTML?
SHTML(Server Parsed HTML)是支持服务器端包含(SSI) 的 HTML 文件,当用户访问 .shtml
页面时,服务器会先解析文件中的 SSI 指令(如插入页眉、页脚或动态内容),再将完整 HTML 发送给浏览器,它适用于重复模块的复用,提升网站维护效率。
构建 SHTML 的详细步骤
基础文件创建
- 创建扩展名为
.shtml
的文件(如index.shtml
)。 - 写入标准 HTML 结构:
<!DOCTYPE html> <html> <head> <title>我的网站</title> </head> <body> <!-- SSI 指令将在此插入内容 --> </body> </html>
使用 SSI 指令
在 .shtml
文件中插入以下常用指令:
-
#include
:插入其他文件内容<!-- 插入页眉 --> <!--#include virtual="/header.html" -->
virtual
适用于虚拟路径(如网站根目录),file
适用于服务器绝对路径(如/var/www/header.html
)。 -
#echo
:输出服务器变量当前时间:<!--#echo var="DATE_LOCAL" --> 文件路径:<!--#echo var="DOCUMENT_URI" -->
其他变量:
REMOTE_ADDR
(用户IP)、HTTP_USER_AGENT
(浏览器类型)。 -
#if
:条件判断<!--#if expr="$HTTP_USER_AGENT = /Mobile/" --> <p>正在通过移动设备访问</p> <!--#endif -->
服务器配置(关键步骤)
- Apache 服务器:
- 启用
mod_include
模块:LoadModule include_module modules/mod_include.so
- 在
.htaccess
或虚拟主机配置中添加:Options +Includes AddType text/html .shtml AddOutputFilter INCLUDES .shtml
- 启用
- Nginx 服务器:
在配置文件中添加:location ~ .shtml$ { ssi on; # 启用 SSI }
- 测试配置:
重启服务器后,访问.shtml
页面,检查是否解析了 SSI 指令(右键查看网页源码,应显示合并后的 HTML)。
安全性与性能优化
- 限制包含路径:
避免使用file
包含敏感路径(如<!--#include file="/etc/passwd" -->
),优先用virtual
指向网站目录内的文件。 - 缓存策略:
对不常变动的包含文件(如页脚),设置浏览器缓存:<FilesMatch "footer.html"> Header set Cache-Control "max-age=604800" </FilesMatch>
- 错误处理:
使用#config
指令自定义错误提示:<!--#config errmsg="[页面组件加载失败]" -->
实际应用示例
场景:网站统一页眉(header.html
)和页脚(footer.html
)。
-
文件结构:
/var/www/ ├─ index.shtml ├─ header.html └─ footer.html
-
index.shtml:
<!DOCTYPE html> <html> <body> <!--#include virtual="/header.html" --> <h1>欢迎访问首页!</h1> <p>当前时间:<!--#echo var="DATE_LOCAL" --></p> <!--#include virtual="/footer.html" --> </body> </html>
用户访问时,服务器自动合并内容并返回完整页面。
注意事项
- 浏览器兼容性:
SSI 由服务器处理,浏览器收到的是普通 HTML,无兼容问题。 - 适用场景:
- 静态网站中重复模块(导航栏、版权声明)的复用。
- 小型动态内容(如显示访问时间),无需后端编程。
- 替代方案:
大型项目建议用 PHP、JavaScript 模板引擎(如 Vue/React)或静态站点生成器(如 Jekyll),SSI 更适用于轻量级需求。
SHTML 通过 SSI 指令实现服务器端内容拼接,适合优化静态网站结构,核心步骤:
- 创建
.shtml
文件并编写 SSI 指令; - 配置服务器启用
mod_include
(Apache)或ssi on
(Nginx); - 遵循安全规范,避免路径漏洞。
合理使用可提升开发效率,但需注意性能瓶颈——频繁包含大文件可能增加服务器负载。
引用说明:
- Apache SSI 官方文档:https://httpd.apache.org/docs/current/howto/ssi.html
- Nginx SSI 模块指南:https://nginx.org/en/docs/http/ngx_http_ssi_module.html
- 服务器安全配置参考:OWASP Server Side Includes Security Cheat Sheet
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/39447.html