3

我有一个应用程序,它依赖于发送全大写和下划线 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 时,还有其他人经历过这种情况吗?

4

3 回答 3

4

我遇到了同样的问题,我的 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 数组中。请注意,每个单独的自定义标题都必须有自己的条目,并且您必须为每个条目使用不同的名称。

于 2016-09-27T08:08:20.523 回答
1

不确定您对机器有多少访问权限。但是你可以使用 PHP 来检查模块

print_r(apache_get_modules());

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

于 2013-07-03T06:29:14.320 回答
1

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

于 2016-03-18T16:48:18.497 回答