Tôi muốn các URL sau trên trang web của tôi tương đương:
/foo/bar
/foo/bar/
/foo/bar/index.html
và hơn nữa tôi muốn hai biểu mẫu thứ hai phát hành chuyển hướng HTTP 301 sang biểu mẫu đầu tiên. Tôi chỉ phục vụ các trang tĩnh, và chúng được sắp xếp theo mẫu thứ ba. (Nói cách khác, khi người dùng yêu cầu /foo/bar
họ sẽ nhận được tệp tại /usr/share/.../foo/bar/index.html
).
nginx.conf
Hiện tại của tôi có chứa những điều sau đây:
rewrite ^(.+)/$ $1 permanent;
index index.html;
try_files $uri $uri/index.html =404;
Điều này hoạt động cho các yêu cầu /foo/bar/index.html
, nhưng khi tôi yêu cầu /foo/bar
hoặc /foo/bar/
Safari nói với tôi rằng đã xảy ra quá nhiều chuyển hướng, thì siêu tốc giả định có một vòng lặp chuyển hướng vô hạn hoặc một cái gì đó tương tự. Làm cách nào tôi có thể lấy nginx để ánh xạ URL tới các tệp theo cách tôi đã mô tả?
Chỉnh sửa: Cấu hình đầy đủ của tôi
Đây là toàn bộ nginx.conf
tên miền của tôi được thay thế bằng Ví dụ.com.com.
user www-data;
worker_processes 1;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
server_names_hash_bucket_size 64;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss application/atom+xml text/javascript image/svg+xml;
server {
server_name www.example.com;
listen 80;
return 301 $scheme://example.com$request_uri;
}
server {
server_name example.com 123.45.67.89 localhost;
listen 80 default_server;
# Redirect /foobar/ to /foobar
rewrite ^(.+)/$ $1 permanent;
root /usr/share/nginx/www/example.com;
index index.html;
try_files $uri $uri/index.html =404;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
/foo/bar/index.html
phải trả lại tệp tại /usr/share/nginx/www/foo/bar/index.html
hoặc tuy nhiên nó được thiết lập. Tất cả các đường dẫn trên trang web tương ứng trực tiếp với các đường dẫn hệ thống tập tin.