Uri isteğinden sadece dosya adı nasıl çıkarılır


11

Dosyanın uzantısına bağlı olarak istek uri yeniden yazmaya çalışıyorum, sonra sadece uri dosya adını ayıklamak ve başka bir klasörde saklamak için çalışıyorum. Buradaki sorun hiçbir dosya adı ve mevcut değişkenler için değişken biçimde önceden uri, request_urive request_filenametam uri verecektir.

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;
       }
}

yapabileceğim en iyi, bunun $1yerine koyduğumda .jpg veya .gif uzantısını almaktır $request_filename:

location @imgstore { 
    proxy_pass $file_folder$1;
}

Yani bilmek istiyorum:

  1. İstekten dosya adı nasıl alınır?
  2. Görüntüleri klasörden diğerine depolamanın doğru yolu var mı?

Yanıtlar:


17

Dosya adını orijinal istekten mi yoksa geçerli uri'den mi (herhangi bir iç yönlendirmeden sonra) ister misiniz? Her ikisi de harita modülünü kullanarak mümkündür :

# 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;
}

Sonra ihtiyacınız olan her yerde $ request_basename veya $ basename kullanın. Haritaların http {} bağlamında tanımlanması ve sunucu {} s'nin kardeşleri haline getirilmesi gerektiğini unutmayın.


Geçerli uri dosya adını istiyorum, harita modülü verebilir verebilir sanmıyorum ama deneyeceğim,
Johnta

Göndermeden önce yerel olarak test ettim ve ikinci harita işe yarıyor (0.9.6+ kullandığınız sürece)
kolbyjack

Teşekkür ederim Kolbyjack, işi yapan harika numara, dosya adını ve uzantısını aldım.
Johnta
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.