пользовательская перезапись URL типа MIME NGINX - PullRequest
1 голос
/ 25 октября 2011

Я использую 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.

Ответы [ 2 ]

0 голосов
/ 15 августа 2012

Решение состоит в том, чтобы зарегистрировать mime-тип в NGINX для файла plain_html или установить для default_type значение content / html.

0 голосов
/ 25 октября 2011

Вам не нужно переписывать для этой цели.try_files /cache/$uri/index.html /cache/$uri.html /cache/$uri должен сделать свое дело.http://wiki.nginx.org/HttpCoreModule#try_filesЭто может решить проблему типа.В противном случае есть директива default_type, чтобы помочь nginx с неизвестными типами.http://wiki.nginx.org/HttpCoreModule#default_type

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...