Azure App Service Linux环境下PHP 8中以PHP方式运行HTML文件失效问题
解决Azure App Service PHP 8下HTML文件无法解析PHP代码的问题
我之前也碰到过一模一样的情况,Azure App Service升级到PHP 8之后,原来基于mod_php的.htaccess配置确实会失效——因为现在Azure的Linux环境默认用的是PHP-FPM而非传统的mod_php了。下面是几个亲测有效的解决办法:
方法1:替换.htaccess中的AddType为SetHandler
把原来的AddType application/x-httpd-php .html .htm替换成下面的规则,强制让Apache对HTML/HTM文件使用PHP处理器:
<FilesMatch "\.(html|htm)$"> SetHandler application/x-httpd-php </FilesMatch>
这个规则会精准匹配所有.html和.htm文件,适配PHP-FPM的运行模式,让服务器正确解析文件中的PHP代码。
方法2:用AddHandler指令替代AddType
如果方法1没生效,可以试试换用AddHandler指令:
AddHandler application/x-httpd-php .html .htm
部分PHP-FPM环境下,AddHandler比AddType更适合关联文件类型与处理器,优先级也更高。
方法3:检查Azure App Service的基础配置权限
确保你的App Service允许.htaccess生效:
- 登录Azure门户,进入你的App Service实例
- 转到配置 > 常规设置,确认选中的PHP版本是你需要的8.x分支
- 若使用Linux计划,默认
AllowOverride是开启的,但如果之前有自定义过Apache配置,要确保AllowOverride All的规则存在(Azure通常默认配置好了,不用手动改,但若有异常可以检查)
方法4:排查REDIRECT_HANDLER返回NULL的问题
$_SERVER['REDIRECT_HANDLER']返回NULL说明你的.htaccess规则根本没触发处理器关联,这时候可以:
- 确认
.htaccess文件放在网站根目录(/home/site/wwwroot)下 - 检查
.htaccess是否有语法错误(可以用本地的Apache配置验证工具提前排查,Azure如果检测到错误也会在日志里提示) - 查看App Service日志:转到监测 > 日志流,查看Apache的错误日志,里面会有规则失效的具体原因
如果以上方法都不行,还可以尝试在配置 > 应用设置里添加PHP_INI_SCAN_DIR,值设为/home/site/wwwroot,然后在根目录创建php.ini文件,添加:
auto_prepend_file = /home/site/wwwroot/prepend.php
通过预加载PHP文件的方式间接处理HTML解析,但这个方法比较繁琐,优先用前面的.htaccess方案。
内容的提问来源于stack exchange,提问作者Matt Doble
相关产品推荐
相关产品推荐

