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


Apache 2 multiviews and 406 error for image/* request

客户端正在请求图像:

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。