Як отримати лише ім'я файлу з запиту uri


11

Я намагаюся переписати uri на запит залежно від розширення файлу, потім витягую з імені лише ім'я файлу та зберігаю його в іншій папці. Проблема тут не в заздалегідь визначеній змінній для імені файлу та доступних змінних uri, request_uriі request_filenameдасть повний uri.

server{

        set $file_folder D:/nginx-1.0.15/imageAll/;  

        location ~*+.(gif|jpg)$ { 
            try_files $uri @imgstore;
        }

        location @imgstore { 
            proxy_pass $file_folder$request_filename;
            proxy_store on;
            proxy_temp_path /nginx-1.0.15/images/;
            proxy_store_access  user:rw  group:rw  all:r;
       }
}

найкраще, що я можу зробити, - це розширення .jpg або .gif, коли я ставлю $1на місце $request_filenameподібне:

location @imgstore { 
    proxy_pass $file_folder$1;
}

Отже, я хочу знати:

  1. Як отримати ім'я файлу від запиту?
  2. Це правильний спосіб зберігання зображень із папки в іншу?

Відповіді:


17

Ви хочете, щоб ім'я файлу було від оригінального запиту або з поточного uri (після будь-якого внутрішнього перенаправлення)? Вони обоє можливі за допомогою модуля карти :

# Gets the basename of the original request
map $request_uri $request_basename {
    ~/(?<captured_request_basename>[^/?]*)(?:\?|$) $captured_request_basename;
}

# Gets the basename of the current uri
map $uri $basename {
    ~/(?<captured_basename>[^/]*)$ $captured_basename;
}

Тоді просто використовуйте $ request_basename або $ basename, де вони вам потрібні. Зверніть увагу, що карти повинні бути визначені в контексті http {}, роблячи їх побратимами сервера {} s.


Я хочу, щоб ім'я файлу з поточного урі, я не думаю, що модуль map не міг би це дати, але я спробую це,
Джонта

Я перевірив її локально перед публікацією, і ця друга карта працює (доки ви використовуєте 0.9.6+)
kolbyjack

Дякую, Колб'як, чудовий трюк, який це зробив, я отримав ім'я файлу та розширення.
Джонта
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.