'Authorization'标头随请求发送,但从apache_request_headers()中丢失

epy*_*nic 5 php apache http-headers

我正在向我的PHP/Apache服务器发送Ajax请求.该请求包含一个Authorization标题,如下面的浏览器开发工具的屏幕截图所示:

在此输入图像描述

在针对我的本地Apache服务器进行测试时,我可以使用AuthorizationPHP从头文件中访问apache_request_headers().但是,在我的生产服务器上(在共享Linux主机上),返回的数组中缺少标头apache_request_headers,如下所示:

array(10) {
  ["Cookie"] => string(31) "_ga=GA1.2.1071821587.1446317606"
  ["Accept-Language"] => string(14) "en-US,en;q=0.8"
  ["Accept-Encoding"] => string(19) "gzip, deflate, sdch"
  ["Referer"] => string(27) "http://goaunited.com/admin/"
  ["User-Agent"] => string(110) "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"
  ["Accept"] => string(33) "application/json, text/plain, */*"
  ["Cache-Control"] => string(8) "no-cache"
  ["Pragma"] => string(8) "no-cache"
  ["Connection"] => string(5) "close"
  ["Host"] => string(13) "goaunited.com"
}
Run Code Online (Sandbox Code Playgroud)

为什么Authorization标题不包含在apache_request_headers()我的生产服务器上的响应中?什么可能导致它被省略?

epy*_*nic 11

经过一些快速搜索后发现设置重写规则有效

 <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
 </IfModule>
Run Code Online (Sandbox Code Playgroud)

谁能告诉我它的作用?


小智 10

是的..

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Run Code Online (Sandbox Code Playgroud)

或者

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
Run Code Online (Sandbox Code Playgroud)

..in .htaccess 对我有用..


小智 5

我编辑了 .htaccess 文件,如下所示。然后添加最后一行解决了问题。

    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ %{ENV:BASE}index.php [QSA,L]
    SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
Run Code Online (Sandbox Code Playgroud)