Șirul de interogare se referă la parametrii GET pe care îi furnizați după adresa URL, de ex ?nume=foo
. Bănuiesc că, în schimb, doriți să serviți fișiere într-un director, deoarece menționați „dosarul afară pe care vrem să îl servim de la Nginx”.
În acest caz, exemplul dvs. ar trebui să funcționeze bine, dar dvs try_files regula se așteaptă să furnizați și numele fișierului în interiorul adresei URL.
Deci, atunci când solicitați GET www.mysite.com apoi Nginx încearcă să găsească un
calea în interiorul rădăcină
director cu oricare nume /
, .html
, .html/
sau eșuează cu codul de eroare 404. cale .html/
se referă la un director numit .html
în interiorul rădăcinii tale și este probabil o greșeală.
În cazul în care aveți un fișier numit index.html
în directorul rădăcină specificat, atunci următoarele solicitări se potrivesc pentru el:
GET www.mysite.com/index.html
(din cauza $uri
)
GET www.mysite.com/index
(din cauza $uri.html
)
Probabil că ceea ce cauți este acesta:
Locație / {
root /var/www/html/out;
index index.html index.htm;
try_files $uri $uri/ =404;
}
Aceasta face următoarele:
- Există un fișier real, specificat de $uri, în directorul rădăcină - apoi serviți asta.
- Există o cale de director, specificată de $uri, în directorul rădăcină?
- Dacă da, verificați dacă conține un fișier numit index.html sau index.htm - atunci servește asta.
- Niciuna dintre cele de mai sus, returnați 404.
Asa de OBȚINEȚI www.mysite.com
ar încerca să găsească un fișier index.html
sau index.htm
în interiorul rădăcinii tale.
În cazul în care vă referiți totuși la șiruri de interogare, puteți scrie ceva de genul acesta:
Locație / {
root /var/www/html/out;
try_files /$arg_file =404;
}
Apoi cere like GET www.mysite.com?file=index.html
ar căuta un fișier index.html
în interiorul rădăcinii tale. Nginx este minunat, nu-i așa?
Sper că acest lucru vă ajută :)
Citiți și mai multe despre try_files și Capcanele Nginx și greșelile comune.