Навигация
В процессе разработки иногда приходится писать эмуляторы партнёрских систем, если доступа к ним нет. Сейчас мне пришлось работать над эмулятором, который должен был предоставлять API вида http://emulator/connectionPoint. Первой мыслью было использовать для этой цели фичу MultiViews, но выбор оказался неверен.
Запрос
GET /connectionPoint HTTP/1.1 Host: emulator User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru-RU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4 Accept-Encoding: gzip, deflate Accept: text/event-stream Accept-Language: ru-RU Cache-Control: max-age=0 Pragma: no-cache Connection: keep-alive
Ошибка соединения, «Options +MultiViews»
HTTP/1.1 406 Not Acceptable Server: Apache Alternates: {"connectionPoint.php" 1 {type application/x-httpd-php} {length 152}} Vary: negotiate,Accept-Encoding TCN: list Content-Encoding: gzip Content-Length: 274 Content-Type: text/html; charset=iso-8859-1 Connection: close
Верный ответ, «Options -MultiViews»
HTTP/1.1 200 OK Content-Type: text/event-stream Connection: close
К сожалению, MultiViews имеет более высокий приоритет, нежели ModRewrite, что делает невозможным исправление ситуации без его отключения.
Итак, рецепт правильных редиректов для EventSource - создание корректного .htaccess
Options -MultiViews RewriteEngine on RewriteBase / RewriteRule ^([^.]*)$ /$1.php [L]
Дискуссия