Testdir eşleşmesinin jpg / txt eşleşmesi yerine seçildiğinden emin olmak için aşağıdaki konumları kullanın:
location ^~ /testdir {
deny all;
return 404;
}
location ~* ^.+\.(jpg|txt)$ {
root /var/www/site;
}
Örnekte iki tür konumunuz var. location /testdir
önek konumu, ve ~
arasında tilde ( ) bulunmadığından .location
/testdir
location ~* ^.+\.(jpg|txt)$
bir regex konumudur ( *
tilde hemen sonra bağlı olan büyük / küçük harfe duyarsız bir konum ). Gönderen nginx belgelerinde :
Belirli bir istekle eşleşen konumu bulmak için nginx önce önek dizeleri (önek konumları) kullanılarak tanımlanan konumları kontrol eder. Bunların arasında en uzun eşleşen öneki sahip konum seçilir ve hatırlanır. Ardından, düzenli ifadeler yapılandırma dosyasındaki görünüm sırasına göre kontrol edilir. Normal ifadelerin araştırması ilk eşleşmede sona erer ve karşılık gelen yapılandırma kullanılır. Düzenli bir ifadeyle eşleşme bulunmazsa, daha önce hatırlanan önek konumunun yapılandırması kullanılır.
Buradaki sorun, testdir konumunuzun hatırlanmasıdır, ancak daha sonra regex aşamasında, eşleşirken jpg / txt konumu seçilir. Dokümantasyondaki şu not, çözümümü (yukarıda verilen) temel alan şeydir:
En uzun eşleşen önek konumu “^ ~” değiştiricisine sahipse, normal ifadeler kontrol edilmez.