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.
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;
}
i was looking for the same. and found this solution.
Use negative regex assertion:
location ~ ^/(?!(favicon\.ico|resources|robots\.txt)) {
.... # your stuff
}
Source
Negated Regular Expressions in location
Suppose you have two locations say, location1
and location2
, you can try following location block configuration to solve your problem.
location ~ ^/(location1|location2) {
rewrite (.*) http://example.com/$1 permanent;
}
Also the problem you are facing could be because of the sequence of multiple location block in your configuration. Please check, In case any of the location block that comes before this, serves the request.