[feature] Add skip_location directive to ngx_http_rewrite

Dmitrii Chekaliuk d.chekaliuk at invisilabs.com
Thu Jan 17 15:32:35 UTC 2013

Hmm, you pushed me to rethink this. Actually, the logic needed for my 
particular task could be done with IFs and BREAKs like this:

location / {
     if ($uri ~ ^/some/path) {
         if ($request_method ~ ^GET|HEAD$) {
             # config 1

         if ($request_method = "PUT") {
             # config 2

     if ($uri ~ ^/some/path/subpath$) {
         # config 3

But nested IFs need to be allowed for that purpose. I can't see any 
obstacles for this, as It seems like adding NGX_HTTP_SIF_CONF and 
NGX_HTTP_LIF_CONF to IF's type would be enough, though I'm not very 
familiar with nginx codebase to know for sure. Or there was some 
objective reason to disallow nesting?

Yours faithfully,

On 17.01.2013 13:32, Nick Kew wrote:
> On 17 Jan 2013, at 10:07, Dmitrii Chekaliuk wrote:
>> Hi guys,
>> I'm new to nginx-devel, so, please, take my apologies in case this question was already discussed and rejected. Nginx is awesome, but I think it lacks the flexibility of configuration selection, e.g. it can't throw away the selected config on demand within the rewrite phase to select another one without a need to actually rewrite URI. Think of Apache mod_rewrite's RewriteCond+RewriteRule, it would be great to have the ability to write something like this:
> I'm not sufficiently familiar with nginx config to comment on how it might work.
> But with Apache we implemented <if "expr …"> to do (among other things)
> exactly what you're asking for, in a saner manner than pseudo-programming
> with mod_rewrite.  Your suggestion looks like "IF foo GOTO bar", but wouldn't
> you prefer IF/ELSE/ENDIF with a similar structure to a Location block?

More information about the nginx-devel mailing list