@pcdesign

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

Например, есть такой location
location /static/ {
        root /path/to/dir;
        expires 30d;
        access_log off;
    }


И приходит запрос: /static/my-doc.doc
Файла уже нет. Есть архив my-doc.zip
Как сделать так, чтобы nginx отдал my-doc.zip?
Если запрашиваемого файла нет, чтобы он искал файл с тем же именем, но с расширением zip.
  • Вопрос задан
  • 144 просмотра
Решения вопроса 2
paran0id
@paran0id
Умный, но ленивый
karabanov
@karabanov
Системный администратор
location /static/ {
  access_log off;
  expires 30d;
  root /path/to/dir;
  try_files $uri @zipped;
}

location @zipped {
  rewrite ^/static/(.*)\.(doc|docx|xls|xlsx)$ /static/$1.zip redirect;
}


Результат:
curl -IL https://example.com/static/test.doc

HTTP/2 302 
server: nginx
content-type: text/html
content-length: 138
location: https://example.com/static/test.zip

HTTP/2 200 
server: nginx
content-type: application/zip
content-length: 29
expires: Thu, 15 Dec 2022 18:31:20 GMT
accept-ranges: bytes

Регулярку можно поменять так, чтобы реагировало вообще на любое расширение, но это уж ты сам.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы