Regular Expression global redirect

António P. P. Almeida appa at perusio.net
Sun Feb 26 14:39:38 UTC 2012


On 26 Fev 2012 07h19 CET, edho at myconan.net wrote:

> 2012/2/26 António P. P. Almeida <appa at perusio.net>:
>> server {
>>    server_name ^~www\.(?<domain>.*)$;
>>    return 301 http://$domain;
>> }
>>
>
> Where can I read the documentation for this? It doesn't seem to be
> mentioned in nginx.org docs and nginx wiki

AFAIK it's undocumented. You can use return for a lot of things. I
hardly ever use rewrite anymore. There are situations where it still
applies, but they're not the majority. 

IMHO using return is more Nginx like, while rewrite harks back to
Apache's mod_rewrite and its "reverse" logic.

Using return you can make a poorman's web service, for example:

location /ws-test {
    return 200 "{uri: $uri, 'service name': 'this is a service'}\n";
}

If you do a capture in the location you can use the captures in the
URI you give return as the second argument. The default status is
302. AFAIK it doesn't support named locations redirects. Hence the
usual idiom of returning an error status and then using error_page for
the redirect with a named location.

It was late and I forgot the $request_uri :( 

Also for old PCRE versions the ?<name> has to be replaced by ?P<name>. 

Both things that were already addressed in the thread.

--- appa



More information about the nginx mailing list