2015-04-20 3 views
3

Например, я хочу сделать это:Как я могу использовать оператор «или» в инструкции nginx «if»?

if ($http_user_agent ~ "MSIE 6.0" || $http_user_agent ~ "MSIE 7.0" (etc, etc)) { 
    rewrite^${ROOT_ROOT}ancient/ last; 
    break; 
} 

вместо этого:

if ($http_user_agent ~ "MSIE 6.0") { 
    rewrite^${ROOT_ROOT}ancient/ last; 
    break; 
} 
if ($http_user_agent ~ "MSIE 7.0") { 
    rewrite^${ROOT_ROOT}ancient/ last; 
    break; 
} 

Nginx отвергает этот синтаксис (минус (и т.д., и т.д.)), и я не вижу ничего в документах об этом. Заранее спасибо.

Кроме того, мы решили не использовать директиву $ antique_browser, так что это не вариант.

+0

В этом случае это так же просто, как 'if ($ http_user_agent ~" MSIE [67] \. ")'. Вы забыли, что это регулярное выражение. –

+1

@AlexeyTen вы должны написать ответ с этим - IMO предпочтительнее другого предлагаемого решения. –

ответ

8

Edit:

Как Алексей Тен не добавить новый ответ, я буду править мой, чтобы дать его лучший ответ в этом случае.

if ($http_user_agent ~ "MSIE [67]\.") 

Оригинальный ответ:

Nginx не допускает множественные или вложенные если заявления, однако вы можете сделать это:

set $test 0; 
if ($http_user_agent ~ "MSIE 6.0") { 
    set $test 1; 
} 
if ($http_user_agent ~ "MSIE 7.0") { 
    set $test 1; 
} 
if ($test = 1) { 
    rewrite^${ROOT_ROOT}ancient/ last; 
} 

Это не короче, но это позволит вам сделать проверьте и поместите правило перезаписи только один раз.

Смежные вопросы