Cách chỉ định một số biến trong chỉ thị bản đồ của nginx


10

Vâng, tôi có một câu hỏi hơi khác so với câu hỏi này : Tôi không muốn ánh xạ hai biến cùng một lúc, tôi muốn ánh xạ một biến bằng hai tham số khác làm tham số.

Quả thực tôi đã đọc trong tài liệu về chỉ thị bản đồ rằng:

Trước phiên bản 0.9.0 chỉ có một biến duy nhất có thể được chỉ định trong tham số đầu tiên.

Vì vậy, khi tôi có nginx 1.8, tôi hy vọng có thể sử dụng nhiều hơn một biến trong tham số đầu tiên.

Điều này khiến tôi nghĩ rằng tôi có thể viết một cái gì đó giống như hai chỉ thị bản đồ cuối cùng trong ví dụ này:

map $http_user_agent $bot {
    default         "";
    "~*Googlebot"   "yes";
    "~*MJ12bot"     "yes";
    "~*bingbot"     "yes";
    etc.
}

map $request        $bot    $np {
    default         ""      "";
    default         "yes"   "";
    "~*newproject"  ""      "yes";
    "~*newproject"  "yes"   "";
}

map $bot    $np     $regular {
    ""      ""      "yes";
    ""      "yes"   "";
    "yes"   ""      "";
}

Nhưng nó không hoạt động ( nginx -ttrả về một

số lượng đối số không hợp lệ trong chỉ thị "bản đồ"

)

Vì vậy, làm thế nào có thể chỉ định một số biến trong tham số đầu tiên? Hoặc, những gì thực sự có nghĩa là tài liệu, nếu tôi hiểu nhầm nó?


Tôi đã thêm câu trả lời cho câu hỏi, nhưng thực sự câu hỏi này trông giống như một meta vấn đề XY.stackexchange.com/questions/66377/what-is-the-xy-probols
Alexey Ten

Có lẽ đó là loại (và tôi không biết về họ). Nhưng tôi đã thực sự nghĩ rằng nó thực sự không thể và có điều gì đó tôi nhớ để hiểu trong tài liệu. Bây giờ thì rõ rồi.
zezoche

Câu trả lời:


20

Bạn đã hiểu nhầm tài liệu của nginx. Điều đó có nghĩa là trước phiên bản 0.9, đối số đầu tiên của biến mapphải là một biến và không có gì khác. Vì phiên bản đầu tiên 0.9.0 có thể là bất kỳ chuỗi nào với bất kỳ số lượng biến nào để nội suy.

Đây là cách khối đầu tiên của bạn trông như thế nào:

map "$bot:$request"      $np {
    default              "";
    "~^yes:"             "";
    "~*^:.*newproject"   "yes";
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.