CakePHP RequestHandler возвращает RSS / JSON вместо HTML

Я двигался весело вместе с моим сайтом до этой недели, когда мы начали видеть некоторые ошибки, которые оказались связаны с моим непониманием того, как работает Cake's RequestHandler, но мне еще предстоит найти подходящее обходное решение.

Я использую один метод для поиска и возврата контента в разных форматах, так что все они живут по одному URL (возможно, это моя ошибка, и мне нужно разделить их). Итак, в моем контроллере у меня есть:

if ($this->RequestHandler->ext == 'rss') {

чтобы забрать RSS-каналы. Я также попытался использовать isRss() но изменил его, полагая, что это стало isRss() моей проблемы. Моя проблема заключается в следующем:

При ударе этого URL-адреса (назовем его /blog ) из браузера, я обычно получаю HTML-ответ. Если я попал в /blog.rss я получаю ответ от RSS. Отлично. Но если я попал в адрес /blog с моим заголовком, как Accepts: application/rss+xml; он будет возвращать RSS независимо от того, что не существует литерала .rss-расширения. Эти страницы кэшируются, поэтому теперь мои пользователи браузера просматривают кешированную версию RSS-канала при запросе адреса /blog вместо HTML-версии.

Я проверил RequestHandler и выяснил, что он использует _setExtension () для установки значения ext на основе заголовка Accepts, даже если не существует «реального» расширения. Кажется, для этого нет переопределения, поэтому похоже, что я либо вынужден самостоятельно анализировать URL-адрес, чтобы увидеть, действительно ли есть расширение, либо полностью отделить эти URL-адреса и не разрешить rss / json из адресного пространства /blog (например, /blog/feed , /blog/json ).

Есть ли лучший / более простой способ обойти это или что-то, что мне не хватает, так как это настроено? Я полагал, что ext был надежным показателем того, что существует фактическое расширение, но, возможно, есть еще один способ его поиска?