Cách được đề xuất có thể là sử dụng a map
, cũng bởi vì các biến này chỉ được đánh giá khi chúng được sử dụng.
Ngoài ra việc sử dụng return 301 ...
được ưu tiên hơn viết lại, bởi vì không có biểu thức chính quy phải được biên dịch.
Dưới đây là một ví dụ về nơi mà máy chủ và tác nhân người dùng như một chuỗi nối được so sánh với một biểu thức chính:
map "$host:$http_user_agent" $my_domain_map_host {
default 0;
"~*^www.domain.com:Agent.*$" 1;
}
server {
if ($my_domain_map_host) {
return 302 http://www.domain2.com$request_uri;
}
}
Và điều này có thể còn linh hoạt hơn, ví dụ nếu không có 2 mà có nhiều tên miền liên quan.
Ở đây bản đồ chúng tôi www.domain.com
với người sử dụng các đại lý bắt đầu với Agent
tới http://www.domain2.com
và www.domain2.com
với chính xác user-agent Other Agent
để http://www.domain3.com
:
map "$host:$http_user_agent" $my_domain_map_host {
default 0;
"~*^www.domain.com:Agent.*$" http://www.domain2.com;
"~*^www.domain2.com:Other Agent$" http://www.domain3.com;
}
server {
if ($my_domain_map_host) {
return 302 $my_domain_map_host$request_uri;
}
}
NB bạn sẽ cần nginx 0.9.0 hoặc cao hơn để chuỗi được nối trong bản đồ hoạt động.