在Heroku的Apache2环境下如何将HTML解析为PHP?
解决Heroku上Apache2将HTML文件解析为PHP的问题
推荐方案:用PHP文件+URL重写(无需修改buildpack)
既然修改buildpack的路径遇到了阻碍,其实有更简单的方法实现你的需求——既避免重复导航/页脚代码,又能保持URL的友好性:
- 把所有需要复用代码的HTML文件改为
.php后缀(比如index.html→index.php) - 抽离公共组件为单独的PHP文件,比如
components/header.php和components/footer.php,把导航、页脚的HTML代码放进去 - 在每个主PHP文件中引入这些组件,示例:
<?php include 'components/header.php'; ?> <!-- 这里写你的页面专属HTML内容 --> <h1>欢迎来到我的页面</h1> <p>这是页面正文</p> <?php include 'components/footer.php'; ?>
- 如果想让用户访问的URL还是
.html后缀(保持友好),在项目根目录创建.htaccess文件,添加URL重写规则:
RewriteEngine On # 把.html请求重写到对应的.php文件 RewriteRule ^([^\.]+)\.html$ $1.php [NC,L]
这样用户访问about.html时,后台会实际加载about.php,完全不影响用户体验,也不用折腾Apache的核心配置。
进阶方案:修改自定义buildpack实现HTML解析为PHP
如果你一定要通过修改Apache配置来实现,这里是正确的操作步骤:
- Fork官方PHP buildpack到你的GitHub账号,然后克隆到本地
- 修改Apache默认配置:找到仓库中的
support/build/_conf/apache2/httpd.conf,添加以下配置(注意不要用之前错误的AddType):
# 让Apache用PHP解析器处理.html/.htm文件 AddHandler application/x-httpd-php .html .htm # 告诉浏览器这些文件是HTML类型,避免触发下载 AddType text/html .html .htm
- 修改编译脚本:找到
bin/compile文件,里面有一段从原官方仓库拉取配置的代码,把对应的仓库地址替换成你自己的fork地址,或者直接删除拉取逻辑,让buildpack使用你本地修改后的httpd.conf - 部署自定义buildpack:
- 把修改后的buildpack推送到你的GitHub仓库
- 在Heroku上为你的应用设置自定义buildpack:
heroku buildpacks:set https://github.com/你的用户名/heroku-buildpack-php.git - 重新部署应用:
git push heroku main
为什么你之前的配置会触发下载?
你之前设置AddType application/x-httpd-php .html,会让浏览器把.html文件识别为PHP二进制执行文件,而不是可渲染的HTML内容,所以才会触发下载。正确的做法是保持AddType text/html .html,同时用AddHandler指定让PHP解析器处理这些文件。
内容的提问来源于stack exchange,提问作者karl-police
相关产品推荐
相关产品推荐

