2016-03-23 11 views
6

nginx.conf jest następujący:Nginx: Kiedy `index` i` try_files` w tym samym bloku, dlaczego `try_files` będzie przetwarzane, a nie dyrektywa` index`?

http { 
    server { 
     listen 8080; 
     server_name example.com;    
     root /tmp/test/example; 
     location/{ 
      index index.html; 
      try_files $uri /test.html; 
     } 

    } 
} 

Kiedy dostęp example.com:8080, to uzyskuje dostęp do /tmp/test/example/test.html, nie index.html.

+0

Co powiesz na "try_files $ uri $ uri//test.html;'? –

+1

@RichardSmith, uzyskał dostęp do pliku 'index.html', dlaczego? – zhenguoli

Odpowiedz

7

Dyrektywa try_files to documented here.

W szczególności dokumentuje dwa elementy :: $uri i $uri/. Pierwsze testy na obecność normalnych plików i drugie na obecność katalogów.

Dyrektywa jest wywoływana jako wynik przetwarzania identyfikatora URI, który wskazuje katalog zawierający plik odpowiadający jednemu z parametrów dyrektyw.

W przypadku try_files $uri /test.html; istnienie katalogu nie jest testowane, a zatem podejmowane jest działanie domyślne.

W przypadku try_files $uri $uri/ /test.html; istnienie katalogu zostało przetestowane pod kątem i dlatego podjęto działanie indeksujące.

+0

Testowanie istnienia katalogu, czy katalog odnosi się do 'katalogu głównego'? @Richard Smith – zhenguoli

+0

@zhenguoli W przypadku URI '/', odpowiedź brzmi tak. –

+0

Katalog ten odnosi się do katalogu, który żądasz w URI, prawda? @Richard Smith – zhenguoli