在Apache 2.4中删除了带有下划线的所有大写HTTP标头

时间:2013-07-03 05:46:37

标签: php apache http http-headers hosting

我有一个应用程序依赖于发送全部大写带下划线的HTTP标头以及请求。

Apache 2.4开始,

  

现在包含无效字符(包括下划线)的标题   默默地放弃

This page建议您可以更改允许未剥离的旧HTTP标头的设置(即,如果它们在CURL中设置,那么它们将显示在PHP中的$ _SERVER数组中)但它并没有说明如何。我尝试将以下内容添加到我的HTACCESS文件中,

  

SetEnvIfNoCase ^ Accept.Encoding $ ^(。*)$ fix_accept_encoding = $ 1   RequestHeader设置Accept-Encoding%{fix_accept_encoding} e   ENV = fix_accept_encoding

但它似乎没有帮助。从Apache 2.2迁移到2.4时有没有其他人经历过这个?

3 个答案:

答案 0 :(得分:1)

不确定您对机器的访问权限。但您可以使用PHP来检查模块

print_r(apache_get_modules());

如果你有mod_setenvif和mod_headers你的.htaccess规则应该没问题

答案 1 :(得分:1)

我遇到了同样的问题,我的REST api需要两个用于身份验证的自定义标头,CCS_USERNAME和CCS_AUTHENTICATION。升级到Apache 2.4后,在$ _SERVER数组中找不到标题。

我必须通过以下方式修改我的htaccess文件以解决问题。

SetEnvIfNoCase ^CCS.USERNAME$ ^(.*)$ fix_ccs_username=$1
RequestHeader set CCS-USERNAME %{fix_ccs_username}e env=fix_ccs_username

SetEnvIfNoCase ^CCS.AUTHENTICATION$ ^(.*)$ fix_ccs_authentication=$1
RequestHeader set CCS-AUTHENTICATION %{fix_ccs_authentication}e env=fix_ccs_authentication

现在,两个自定义标头都出现在$ _SERVER数组中。请注意,每个自定义标头必须具有自己的条目,并且必须为每个标头使用不同的名称。

答案 2 :(得分:0)

引用的两行替换名为Accept(。*)Encoding to Accept-Encoding的标头。您必须修改此示例以符合标题名称。