Apache 2.4 中所有大写的 HTTP 标头都去掉了下划线

sam*_*ker 3 php apache hosting http http-headers

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

从Apache 2.4开始,

包含无效字符(包括下划线)的标头现在会被静默删除

此页面建议您可以更改一些设置,以允许不删除旧的 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 时经历过这种情况吗?

小智 6

我遇到了同样的问题,我的 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
Run Code Online (Sandbox Code Playgroud)

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