Rewrite rules with NGinx

António P. P. Almeida appa at perusio.net
Sun Jan 20 17:22:08 UTC 2013


On 20 Jan 2013 17h35 CET, mikydevel at yahoo.fr wrote:

> ----- Mail original -----
>
>> De : Francis Daly <francis at daoine.org>
>>
>> Hi there,
>>
>> Untested, but: it feels nicer to avoid rewrite if possible.
>
> Hello Francis,
> Thank you for your answer.
>
>>>   Action 1:   I would like that when people access to
>>> www.domain.org/nginx the system
>> queries the webpage www.domain.org/page.php?arg=nginx
>>
>>   location = /nginx {    # proxy_pass or fastcgi_pass and
>> fastcgi_param, or whatever is appropriate   }
>>
>> "appropriate" depends on which non-nginx thing you use to process
>> php.
>
> I have not installed anything like that at the moment but I'll use
> fastcgi I think. I'm not sure I fully understand your answer though.
>
>>>   Action 2:   For people who try to access to
>>> www.domain.org/page.php?arg=nginx, they are
>> redirected to www.domain.org/nginx
>>
>>   location = /page.php {
>>    if (#this_should_redirect) {
>>     return 302 /nginx;
>>    }
>>    # proxy_pass or fastcgi_pass, or whatever is appropriate
>>   }
>>
>> "this_should_redirect" might be based on $arg_arg, or on 
>> $query_string,
>> or on something similar.
>
> According to your answer I should write something like this
> location = /page.php {
> if ($arg_arg = nginx) {
>      return 302 /nginx;
>      }
> # proxy_pass or fastcgi_pass, or whatever is appropriate
> }
>
>
>
>> What should happen for /page.php?arg=other ?
> I didn't think about this case but if arg=other, I would like the
> redirection to go to www.domain.org/http
>
>> And for /page.php?arg=nginx&other?
> I'm not sure I understand but the arguements provided will be
> arg=nginx&language=ru. So yes there could be more than one
> argument. But my Apache setting has only one argument at the moment
> and I'd like to move from Apache to Nginx.

I'm not sure I understand what you want to do. It seems you'll get a
redirect loop. But anyway, try this (untested):

map $arg_arg$arg_language $redirect {
    default 0;
    nginxru 1;
    ## Add as many lines as arg_arg and language combinations needed...
}

location = /page.php {
    error_page 418 =200 /nginx;
    if ($redirect) {
        return 418;
    }
    ## FCGI content handler here...
}


location = /nginx {
    if ($status != 200) {
        return 302 /page.php?$query_string;
    }
    try_files /page.php?$query_string =404;
}

--- appa



More information about the nginx mailing list