在Apache 2.4中,使用下划线的全大写HTTP头将被删除。

3
我有一个应用程序,它依赖于在请求中发送全大写带下划线的HTTP头。从Apache 2.4开始,包含无效字符(包括下划线)的标头将被静默丢弃。此页面建议更改设置以允许不被剥离的旧版HTTP头(即,如果它们在CURL中设置,则会显示在PHP中的$ _SERVER数组中),但未说明如何更改。我尝试将以下内容添加到我的HTACCESS文件中,但似乎没有帮助。是否有其他人在从Apache 2.2升级到2.4时遇到过这种情况?

你检查过Apache是否已加载mod_setenvif和mod_header模块吗? - tlenss
@tlenss 这个是可以在htaccess中启用的吗?还是必须在httpd.conf中进行设置?我目前使用的是共享主机,对于修改服务器的能力有一定限制。 - sambecker
3个回答

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

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


1

我不确定你对计算机的访问权限有多少。但你可以使用PHP来检查模块。

print_r(apache_get_modules());

如果您安装了mod_setenvif和mod_headers,您的.htaccess规则应该是正确的。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接