Apache 2多视图和406错误的图像/ *请求

时间:2013-10-03 21:12:52

标签: php apache http apache2 multiview

客户正在请求图片:

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脚本无法使用image / png进行响应,并且会引发406 Not Acceptable错误。

我是否可以成功配置Apache / PHP以响应此请求?

2 个答案:

答案 0 :(得分:2)

  

我是否可以成功配置Apache / PHP以响应此请求?

是。只需使用MultiviewsMatch指令告诉Apache它可以提供.php个文件,无论它们的MIME类型是否与Accept标题兼容:

<Files "*.php">
    MultiviewsMatch Any
</Files>

从文档中,效果如下:

  

即使Any无法识别扩展程序,您也可以最终允许mod_mime个扩展程序匹配。

答案 1 :(得分:-1)

您需要在此上下文中禁用MultiViews,或者创建脚本的虚拟副本,其扩展名告诉mod_negotiation它可以生成哪种类型的mimetypes(不是真的推荐)

按原样,mod_negotiation无法探测users.php可以生成哪些类型。