如何在Heroku中修改.htaccess与httpd.conf?实现HTML解析为PHP
解决Heroku Apache2 Buildpack下HTML文件解析为PHP的问题
我之前折腾Heroku PHP Apache环境的时候也碰到过一模一样的问题,想让HTML文件支持PHP的文件包含功能,试了各种配置踩了不少坑,给你几个亲测有效的方案:
方案1:使用.htaccess(最简单)
Heroku的Apache buildpack默认会加载项目根目录的.htaccess文件,不用额外配置Procfile。直接在根目录创建.htaccess,添加以下规则:
# 让HTML/HTM文件走PHP解析 <FilesMatch "\.(html|htm)$"> SetHandler application/x-httpd-php </FilesMatch>
把文件commit后push到Heroku,重新部署后就能生效了。如果你的PHP是用FPM模式运行的,这个规则完全适用。
方案2:用-C参数追加httpd.conf配置(避免覆盖默认配置)
你之前用-c httpd.conf报错是因为这个参数会替换Heroku默认的httpd.conf,而默认配置里已经包含了监听PORT环境变量的规则,你自己的httpd.conf没有这个配置就会出现端口冲突。
正确的做法是用-C参数追加自定义配置:
- 在项目根目录创建一个
custom-httpd.conf(名字随便取,比如html-php.conf),只写需要的规则:
<FilesMatch "\.(html|htm)$"> SetHandler application/x-httpd-php </FilesMatch>
- 修改Procfile,用
-C指定这个配置文件:
web: heroku-php-apache2 -C custom-httpd.conf
这样Heroku会先加载默认的httpd.conf,再加载你的自定义规则,既不会破坏原有配置,又能实现HTML解析为PHP的需求。
方案3:利用Buildpack的自定义配置目录
Heroku PHP buildpack支持在项目根目录创建conf/apache2/文件夹,里面的.conf文件会被自动加载到Apache配置中,不用修改Procfile:
- 创建目录
conf/apache2/,然后在里面新建html-as-php.conf文件,内容和上面一样:
<FilesMatch "\.(html|htm)$"> SetHandler application/x-httpd-php </FilesMatch>
- 直接commit push到Heroku,buildpack会自动识别并加载这个配置文件。
为什么之前的-C参数没生效?
如果用了-C但规则没生效,大概率是规则写法的问题:
- 确保用
FilesMatch匹配文件后缀,而不是简单的AddHandler(有时候Apache的handler优先级问题会导致AddHandler不生效) - 检查你的HTML文件里的PHP代码是不是标准格式(比如
<?php ... ?>,不要用短标签除非你特意开启了)
内容的提问来源于stack exchange,提问作者karl-police
相关产品推荐
相关产品推荐

