4

We have CSS file "development.css", but for IE users I need to redirect them to "production.css" instead. There's a location rule for that:

location = /css/development.css {
  if ($http_user_agent ~* 'Trident') {
    rewrite ^(.*)$ /css/production.css redirect;
  }
}

The redirect works for IE correctly, but for all other browsers it's 404. Nginx's "if" doesn't have "else"; what is the correct way to handle ifs with rewrite?

  • Please show the complete server block. The problem will be somewhere else. – Michael Hampton Jan 17 '18 at 3:58
  • No it was exactly in this rule. I've added alias with full path to production.css and it works! – softshape Jan 17 '18 at 4:55
6

I recommend you to use nginx map. Something like this (written in the browser, not tested):

map $http_user_agent $envtype {
    default       "production";
    "~Trident" "development";
}

rewrite /css/development.css /css/$envtype.css;
  • This is even better, shorter solution and it works! – softshape Jan 17 '18 at 8:04
1

So this is the code that works.

    location = /css/development.css {
        if ($http_user_agent ~* 'Trident') {
            rewrite ^(.*)$ /css/production.css last;
        }
        alias C:/Work/src/css/development.css;
    }

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.