You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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配置来实现,这里是正确的操作步骤:

  1. Fork官方PHP buildpack到你的GitHub账号,然后克隆到本地
  2. 修改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
  1. 修改编译脚本:找到bin/compile文件,里面有一段从原官方仓库拉取配置的代码,把对应的仓库地址替换成你自己的fork地址,或者直接删除拉取逻辑,让buildpack使用你本地修改后的httpd.conf
  2. 部署自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:23:26