Search code examples
regexnginxwebserver

Nginx location "not equal to" regex


How do I set a location condition in Nginx that responds to anything that isn't equal to the listed locations?

I tried:

location !~/(dir1|file2\.php) {
   rewrite ^/(.*) http://example.com/$1 permanent;
}

But it doesn't trigger the redirect. It simply handles the requested URI using the rules in the rest of the server configuration.


Solution

  • According to nginx documentation

    there is no syntax for NOT matching a regular expression. Instead, match the target regular expression and assign an empty block, then use location / to match anything else

    So you could define something like

    location ~ (dir1|file2\.php) { 
        # empty
    }
    
    location / {
        rewrite ^/(.*) http://example.com/$1 permanent; 
    }