Я наконец нашел способ обойти.
У меня был набор условий перезаписи для работы с каталогом кэша, который использует моя конфигурация Rails.
# Check the path + .html
if (-f $document_root/cache/$uri.html) {
rewrite (.*) /cache/$1.html break;
}
...
Эти переписывания были применены, даже если запрос был POST, что привело к ошибке 405.
Мне удалось применить переписать, только если запрос является GET. Я не уверен, что это самое эффективное решение, но, похоже, оно работает. Научиться справляться с множественными условиями в Nginx было самой сложной задачей. (источник: http://wiki.nginx.org/RewriteMultiCondExample)
set $dest "";
if ($request_method = GET) {
set $dest "/cache";
}
# Check / files with index.html
if (-f $document_root/cache/$uri/index.html) {
set $dest $dest/$uri/index.html ;
}
# Check the path + .html
if (-f $document_root/cache/$uri.html) {
set $dest $dest/$uri.html ;
}
# Check directly
if (-f $document_root/cache/$uri) {
set $dest $dest/$uri ;
}
if ($dest ~* ^/cache/(.*)$) {
rewrite (.*) $dest break;
}
Есть ли лучшее решение?