Клиент запрашивает изображение:
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.