客户端正在请求图像:
GET /api/2.0/users/80.png HTTP/1.1
Host: learnwithecho.com
Proxy-Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: image/* <------------------------------ HERE'S THE IMPORTANT PART
Accept-Language: en-us
Connection: keep-alive
User-Agent: Echo/1.0.16.1 CFNetwork/672.0.2 Darwin/12.5.0
我在 api/2.0/users.php 有一个脚本(是的,PATH_INFO 已打开)
...
header('Content-Type: image/png');
$user = User::getUserWithID($filename);
header("Location: ".$user->getImageURL());
exit(0);
但是 Apache 或 PHP 正试图表现得像它了解我一样......事实并非如此。它假设PHP脚本不可能想要用图像/png响应,并且会抛出406 Not Acceptable
错误。
我能否成功配置 Apache/PHP 来响应此请求?
我能否成功配置 Apache/PHP 来响应此请求?
是的。只需使用 MultiviewsMatch
指令告诉 Apache 它可以提供.php
文件,无论它们的 MIME 类型是否与 Accept
标头兼容:
<Files "*.php">
MultiviewsMatch Any
</Files>
从文档中,效果如下:
您最终可能会允许
Any
扩展匹配,即使mod_mime
无法识别该扩展。
您需要在此上下文中禁用多视图,或者使用扩展名创建脚本的虚拟副本,告诉mod_negotiation它可以生成哪种 mimetype(不真正推荐)
按原样,mod_negotiation无法探测用户可以生成哪些类型.php。