Apache升级后带下划线的请求头无法识别如何配置解决
下划线请求头无法识别问题解决方案
根因说明
Apache默认会丢弃名称含下划线的HTTP请求头,目的是规避CGI规范下中划线、下划线均被映射为下划线导致的头名称冲突,你升级后配置被重置才触发了该问题。
方案1:修改Apache配置(推荐,无需改动业务代码)
- 找到Apache主配置文件:
- RHEL/CentOS/Fedora 路径一般为
/etc/httpd/conf/httpd.conf - Debian/Ubuntu 路径一般为
/etc/apache2/apache2.conf
- RHEL/CentOS/Fedora 路径一般为
- 在配置文件中添加如下参数:
HttpProtocolOptions AllowUnderscoresInHeaders - 若你使用FastCGI模式运行PHP(新版Apache默认模式),需额外添加配置允许CGI层传递下划线头:
SetEnvIfNoCase ^(.+)$ "HTTP_$1" passreqheaders=$1 - 重启Apache服务生效:
- RHEL/CentOS/Fedora 执行:
systemctl restart httpd - Debian/Ubuntu 执行:
systemctl restart apache2
- RHEL/CentOS/Fedora 执行:
方案2:无Apache配置权限时的兼容方案
如果无法修改Apache配置,将业务请求中的下划线头替换为中划线(-)即可正常被Apache接收,PHP侧获取到头后再将中划线替换回下划线即可,业务逻辑几乎无需修改。
配置验证
在PHP中执行如下代码即可验证配置是否生效:
var_dump(getallheaders()['你的自定义_下划线请求头名']);
正常输出头的对应值即为配置成功。
内容的提问来源于stack exchange,提问作者naspy971
相关产品推荐
相关产品推荐

