Chuỗi truy vấn đề cập đến các tham số GET mà bạn cung cấp sau URL, ví dụ: ?name=foo
. Tôi đoán là bạn muốn phân phối các tệp trong một thư mục thay vì bạn đề cập đến "thư mục ngoài mà chúng tôi muốn phân phát từ Nginx".
Trong trường hợp này, ví dụ của bạn sẽ hoạt động tốt, nhưng try_files quy tắc mong rằng bạn cũng cung cấp tên tệp bên trong URL.
Vì vậy, khi bạn đang yêu cầu GET www.mysite.com sau đó Nginx cố gắng tìm một
con đường bên trong nguồn gốc
thư mục với một trong hai tên /
, .html
, .html/
hoặc thất bại với mã lỗi 404. Con đường .html/
đề cập đến một thư mục có tên .html
bên trong gốc của bạn và có thể là một sai lầm.
Trong trường hợp bạn có một tệp có tên index.html
trong thư mục gốc được chỉ định của bạn thì các yêu cầu sau sẽ phù hợp với nó:
NHẬN www.mysite.com/index.html
(bởi vì $uri
)
NHẬN www.mysite.com/index
(bởi vì $uri.html
)
Những gì bạn có thể đang tìm kiếm là đây:
địa điểm / {
gốc/var/www/html/ra;
chỉ mục index.html index.htm;
try_files $uri $uri/ =404;
}
Điều này làm như sau:
- Có một tập tin thực tế, được chỉ định bởi $uri, trong thư mục gốc của bạn - sau đó phục vụ cái này.
- Có một đường dẫn thư mục, được chỉ định bởi $uri, trong thư mục gốc của bạn?
- Nếu có, hãy kiểm tra xem nó có chứa tệp có tên index.html hoặc chỉ mục.htm - sau đó phục vụ này.
- Không có điều nào ở trên, trả về 404.
Cho nên NHẬN www.mysite.com
sẽ cố gắng tìm một tập tin index.html
hoặc chỉ mục.htm
bên trong gốc của bạn.
Trong trường hợp bạn vẫn muốn nói đến các chuỗi truy vấn, bạn có thể viết một cái gì đó như thế này:
địa điểm / {
gốc/var/www/html/ra;
try_files /$arg_file =404;
}
Sau đó yêu cầu như NHẬN www.mysite.com?file=index.html
sẽ tìm kiếm một tập tin index.html
bên trong gốc của bạn. Nginx thật tuyệt phải không?
Hi vọng điêu nay co ich :)
Cũng đọc thêm về try_files và Cạm bẫy Nginx và những sai lầm phổ biến.