Я использую Rails 3.1 и NGINX.
Что я делаю со своими веб-сайтами, так это с помощью трюка с хэшбэнгом по URL-адресу + popstate, чтобы перезагрузить URL-адрес, а затем использую AJAX для загрузки следующей страницы. Затем Rails распознает, что это AJAX-запрос, и затем доставляет представление без макета (или урезанной версии). Это работает, но когда я пытаюсь кэшировать вывод в мое собственное расширение (так называемое plain_html), NGINX не позволяет перезаписи URL работать.
Я кеширую свои кэшированные файлы на странице Rails в директорию кеша, расположенную в публичной папке. Это мои URL переписывает для моих файлов HTML.
if (-f $document_root/cache/$uri/index.html) {
rewrite (.*) /cache/$1/index.html break;
}
if (-f $document_root/cache/$uri.html) {
rewrite (.*) /cache/$1.html break;
}
if (-f $document_root/cache/$uri) {
rewrite (.*) /cache/$1 break;
}
Первые два предназначены для всего, что не имеет расширения HTML, а последнее - для всех в папке кэша. Последний должен в основном работать для всего, что имеет другое расширение и находится в папке кэша, например:
GET /articles # -> /cache/articles.html
GET /articles.html # -> /cache/articles.html
GET /articles.plain_html # -> /cache/articles.plain_html
Это, похоже, не работает для окончательного варианта. Это заставляет браузер загружать его (если я обращаюсь к нему в адресной строке), и содержимое загруженного файла не является кэшированным содержимым (я пытался добавлять слова непосредственно в файл кэша).
Я настроил NGINX, чтобы добавить его как mime_type, и я уверен, что тип mime работает, потому что когда я это делаю:
GET /cache/articles.plain_html # -> this works fine
Работает напрямую. Итак, что-то происходит с переписыванием. Есть идеи, что мне делать?
Кстати, этот метод переписывания plain_html отлично работает с использованием Apache.