如何通过.htaccess为HTML页面head插入指定link与meta标签
要实现通过.htaccess给所有HTML页面的<head>标签批量插入指定内容,需要借助Apache的mod_substitute和mod_filter模块,操作步骤如下:
前提准备
首先确认你的Apache服务器已经启用了上述两个模块,大部分主流虚拟主机默认会开启,自行搭建的服务器可以在Apache配置文件中加载对应模块。
配置代码
将以下代码写入站点根目录的.htaccess文件即可:
<IfModule mod_substitute.c> <IfModule mod_filter.c> # 仅对HTML类型的响应内容执行替换 AddOutputFilterByType SUBSTITUTE text/html # 匹配head标签,批量插入指定内容 Substitute "s|<head[^>]*>|$0\n<link type='image/x-icon' rel='shortcut icon' href='/images/favicon.ico' />\n<link rel='apple-touch-icon' sizes='180x180' href='/apple-touch-icon.png'>\n<link rel='icon' type='image/png' sizes='32x32' href='/favicon-32x32.png'>\n<link rel='icon' type='image/png' sizes='16x16' href='/favicon-16x16.png'>\n<link rel='manifest' href='/site.webmanifest'>\n<link rel='mask-icon' href='/safari-pinned-tab.svg' color='#000'>\n<meta name='msapplication-tilecolor' content='#000' />\n<meta name='theme-color' content='#ffffff' />\n<link rel='stylesheet' href='/css/styles.css' />|ni" </IfModule> </IfModule>
配置说明
- 代码里所有资源路径前加了
/使用站点绝对路径,避免子层级页面加载资源时路径出错,如果站点部署在子目录下,在路径前补充子目录路径即可,比如/子目录名/images/favicon.ico - 替换规则末尾的
ni参数分别表示不执行正则分组回溯、匹配时忽略大小写,兼容带属性、大小写写法不同的<head>标签 - 该方案是在服务器返回内容时动态插入标签,不会修改本地原有HTML文件,完全满足缩减原文件体积的需求
常见问题处理
如果开启gzip压缩后配置不生效,说明服务器模块执行顺序有误,mod_substitute在压缩完成后执行无法识别内容,可以调整Apache模块优先级让替换操作在压缩前运行,不推荐直接取消gzip压缩。
内容的提问来源于stack exchange,提问作者JAT86
相关产品推荐
相关产品推荐

