Apache中RequestHeader set配置对带下划线的请求头不生效问题
问题原因
- Apache 2.4.25及以上版本默认开启了请求头安全校验,会直接丢弃名称包含下划线的HTTP请求头,避免头名称映射到CGI环境变量时出现歧义。因此你配置中的
%{req:Drupal_NNI}根本无法获取到对应请求头的值,自然无法完成替换操作。 - 本地Xampp 3.3环境能正常运行,是因为Xampp的默认配置中已经开启了下划线请求头的允许开关,而服务器的Apache 2.4.46保持了默认的安全配置。首次配置临时生效大概率是当时临时加载了兼容配置,后续重载配置后恢复了默认规则。
- 不带下划线的
john请求头不会被安全规则拦截,所以对应的重写配置可以正常运行。
解决方案
- 在Apache的全局配置文件
httpd.conf,或者对应站点的<VirtualHost>配置块中添加如下规则,开启下划线请求头支持:
HttpProtocolOptions AllowUnderscoresInHeaders On
注意:该参数为服务器级配置,不能放在
.htaccess文件中,否则无法生效。
- 执行命令重启Apache服务使配置生效:
systemctl restart httpd
如果是使用Apache自带控制工具,可执行:apachectl restart
重启完成后你原有请求头替换配置即可正常生效。
内容的提问来源于stack exchange,提问作者naspy971
相关产品推荐
相关产品推荐

