1

客户端正在请求图像:

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 来响应这个请求吗?

4

2 回答 2

2

我可以成功配置 Apache/PHP 来响应这个请求吗?

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

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

从文档来看,效果如下:

您最终可能会允许Any扩展名匹配,即使mod_mime不识别扩展名。

于 2014-07-06T18:21:55.600 回答
-1

您需要在这种情况下禁用 MultiViews 或创建脚本的虚拟副本,并使用扩展名告诉 mod_negotiation 它可以生成哪些类型的 mimetypes(不推荐)

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

于 2013-10-17T13:12:42.297 回答