Bạn có thể làm điều đó với một số chuỗi bản đồ
khối. Đây là một ý tưởng:
bản đồ $arg_p $url_p {
liên hệ /liên hệ;
tĩnh $ url_id;
danh mục $url_action;
# giá trị mặc định sẽ là một chuỗi rỗng
}
bản đồ $arg_id $url_id {
sự nghiệp/nghề nghiệp;
về/về;
# các trang tĩnh khác chuyển hướng đến /about
mặc định/về;
}
bản đồ $arg_action $url_action {
hình ảnh $url_cat_id;
lượt xem hình ảnh $url_pid;
# hành động không công khai khác mặc định là /products
mặc định/sản phẩm;
}
bản đồ $arg_cat_id $url_cat_id {
1 /product-category/category-slug-1;
2 /product-category/category-slug-2;
# danh mục không công khai khác sẽ chuyển hướng đến /product-categories
mặc định/danh mục sản phẩm;
}
bản đồ $arg_pid $url_pid {
1 /product/product-slug-1;
2 /product/product-slug-2;
# sản phẩm chưa niêm yết khác mặc định là /products
mặc định/sản phẩm;
}
người phục vụ {
nghe ...
tên máy chủ ...
...
biến if ($url_p) { # if '$url_p' không phải là chuỗi rỗng
trả lại 301 $ url_p;
}
địa điểm / {
...
}
...
}
Một số bản đồ
các khối có thể được rút ngắn, ví dụ: giả sử bạn có 3 trang tĩnh /nghề nghiệp
, /khách hàng
và trang "mặc định" /xung quanh
, 5 danh mục và 45 sản phẩm:
bản đồ $arg_id $url_id {
~^(nghề nghiệp|khách hàng)$ /$1;
mặc định/về;
}
bản đồ $arg_cat_id $url_cat_id {
~^([1-5])$ /product-category/category-slug-$1;
mặc định/danh mục sản phẩm;
}
bản đồ $arg_pid $url_pid {
~^([1-9]|[1-3]\d|4[0-5])$ /product/product-slug-$1;
mặc định/sản phẩm;
}
Cập nhật
OP nói rằng anh ấy không thể sử dụng bản đồ
chỉ thị vì anh ta không có quyền truy cập vào cấu hình nginx đầy đủ mà chỉ truy cập vào người phục vụ
khối nội dung.Mặc dù giải pháp trước đó thanh lịch hơn nhiều (và sẽ hiệu quả hơn về mặt hiệu suất), nhưng có thể thực hiện tương tự chỉ bằng cách sử dụng nếu
khối:
nếu ($arg_p = liên hệ) { return 301 /liên hệ; }
nếu ($arg_p = tĩnh) { đặt $trang tĩnh_$arg_id; }
if ($page = static_career) { return 301 /career; }
if ($page) { return 301 /about; } # bất kỳ thứ gì không phải là 'nghề nghiệp' được chuyển hướng đến '/about'
nếu ($arg_p = danh mục) { đặt $action $arg_action; }
if ($action = hình ảnh) { set $page category_$arg_cat_id; }
if ($page = category_1) { return 301 /product-category/category-a; }
if ($page = category_2) { return 301 /product-category/category-b; }
#...các danh mục khác
if ($action = images) { return 301 /product-categories; } # danh mục chưa được chỉ định
if ($action = viewimages) { set $page product_$arg_pid; }
if ($page = product_1) { return 301 /product/product-a; }
if ($page = product_2) { return 301 /product/product-b; }
# ... sản phẩm khác
if ($action = viewimages) { return 301 /products; } # sản phẩm chưa niêm yết đã chỉ định
# nếu bạn muốn xử lý bất kỳ hành động không công khai nào theo một cách đặc biệt nào đó
# if ($action) { ... } # đối số truy vấn 'hành động' không phải 'hình ảnh' hay 'viewimages'
Đoạn này có thể được đặt trong người phục vụ
hoặc địa điểm
bối cảnh.