ms-dred
@ms-dred
Вечно что то не то и что то не так...

Как в nginx отдать файл с другим расширением?

Всем привет.
Не могу понять как реализовать задумку.
У меня на сервере хранятся файлы с расширением .jpeg и .gif, в случаях с .gif выводится заглушка .jpeg, но если обращение идет непосредственно к оригинальному формату, то возникают проблемы с отсутствующим файлом.
В Nginx прописан location
location @original {
        try_files $image_folder_1$uri  $image_folder_0$uri @errors;
}

В случаях когда файл запрашивают с правильным расширением, а это .jpeg, то никаких проблем нет, но некоторые файлы имеют расширение .gif, и при запросе file.jpeg естественно его нет, но есть file.gif
Мне хочется сделать в идеале дополнительную проверку в этот location или через него по цепочке на другой location наличие файла .gif и если он есть сделать на него редирект 301 с расширения file.jpeg на file.gif, если .gif не существует то уже скинуть все на @errors

Или хотя бы отобразить по ссылке на file.jpeg, сам file.gif

Ну если на JS писать частично то было бы что то вроде
location @original {
        try_files $image_folder_1$uri  $image_folder_0$uri $image_folder_1$uri.replace(".jpeg", ".gif") $image_folder_0$uri.replace(".jpeg", ".gif") @errors;
}
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
@dodo512
Или хотя бы отобразить по ссылке на file.jpeg, сам file.gif

Создать новую переменную и заменить .jpeg на .gif с помощью map.
map $uri $gif {
default         $uri;
~^(.*)\.jpeg$  "$1.gif";
}


server {
    location @original {
        try_files $image_folder_1$uri  $image_folder_0$uri $image_folder_1$gif $image_folder_0$gif @errors;
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы