How can I rewrite this nginx "if" statement?

Nginx

Nginx Problem Overview


For example, I want to do this:

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

instead of this:

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 rejects this syntax (minus the (etc, etc)), and I don't see anything in the docs about this. Thanks in advance.

Also, we opted not to use $ancient_browser directive, so that's not an option.

Nginx Solutions


Solution 1 - Nginx

Edit:

As Alexey Ten didn't add a new answer, I'll edit mine to give his better answer in this case.

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

Original answer:

Nginx doesn't allow multiple or nested if statements however you can do this :

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;
}   

It is not shorter but it allows you to do the check and put the rewrite rule only once.

Alternative answer:

In some cases, you can also use | (pipe)

if ($http_user_agent ~ "(MSIE 6\.0)|(MSIE 7\.0)") {
  rewrite ^ ${ROOT_ROOT}ancient/ last;
}  

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBryce JohnsonView Question on Stackoverflow
Solution 1 - NginxEric LyView Answer on Stackoverflow