如何在不修改扩展名的.htm/.html页面中运行PHP代码
.htm/.html页面解析PHP7.4配置修复方案(SiteGuard托管主机环境)
现有配置的问题
- 你写的两行
AddHandler规则存在覆盖问题:第二行规则只绑定了.php和.html后缀,会直接覆盖第一行对.htm的绑定配置,等于.htm后缀根本没被纳入PHP解析范围。 - SiteGuard托管主机默认对.htm、.html后缀配置了强制静态处理规则,优先级高于用户自定义的AddHandler规则,这类请求默认会直接返回静态源码,不会走到PHP解析层。
- 部分SiteGuard节点的PHP7.4使用LSPHP解析器,默认的
application/x-httpd-php74标识符不生效,需要使用主机商自定义的解析标识。
正确配置方法
删除原有两行AddHandler规则,将以下配置放到.htaccess文件的最顶部(不要放在网站程序自带的重写规则、缓存规则后面,避免被优先级更高的规则覆盖):
# 关闭htm/html后缀的强制静态缓存规则 SetEnvIf Request_URI "\.(htm|html)$" no-cache=1 # 绑定htm/html后缀到PHP7.4解析器 <FilesMatch "\.(htm|html)$"> SetHandler application/x-httpd-php74 </FilesMatch>
如果配置后出现500错误、或者仍然输出PHP源码,把SetHandler后面的标识符替换为x-httpd-php74-lsphp即可,这是SiteGuard主机LSPHP解析器的通用标识。
需要额外检查的服务器配置项
- 登录SiteGuard主机面板,检查是否开启了“静态HTML加速”“全页静态缓存”类功能,如果开启,需要把.htm、.html后缀从缓存/加速的后缀列表中移除,面板端配置优先级高于.htaccess规则,不修改面板规则无论怎么改.htaccess都不会生效。
- 配置保存后,先清空SiteGuard主机自带的节点缓存,再清空本地浏览器缓存后测试,避免缓存导致规则不生效的误判。
- 测试时不要用包含复杂逻辑的页面,先写一个仅包含
<?php phpinfo(); ?>的简单test.htm文件上传验证,排除自身代码语法错误的干扰。
内容的提问来源于stack exchange,提问作者Tausif
相关产品推荐
相关产品推荐

