我有一个应用程序依赖于发送全部大写带下划线的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时有没有其他人经历过这个?
答案 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的标头。您必须修改此示例以符合标题名称。