Apache 2 multiviews и 406 ошибка для изображения / * запрос

Клиент запрашивает изображение:

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 не распознает расширение.

Вам нужно либо отключить MultiViews в этом контексте, либо создать фиктивные копии вашего сценария с расширениями, которые сообщают mod_negotiation о том, какие типы mimetypes он может генерировать (не рекомендуется)

as-is, mod_negotiation не имеет возможности исследовать, какие типы могут быть созданы users.php.