EpicCDN
By:
EpicCDN

nginx rule for wildcard url

February 16, 2016 1.4k views
Nginx

Hello, I need to set some headers to all urls with certain scheme ie:
http://domain.com/teenager-kills-abusive-stepfather/66585/

so i can read it something like this http://domain.com/*/*/

i have an if (I know if is evil) like this one:

if ($uri ~ "/php-fpm-status/") {
        set $bypass "true";
        add_header Something "value";
}

but in this case i need something like this:

if ($uri ~ "/*/*/") {
        set $bypass "true";
        add_header Something "value";
}

I really suck on regular expressions, so any help would be nice.
or maybe a regular expressions dummy to regular tool/convertor link :D

3 Answers

Hi!

As you said, if is indeed evil :) You should use a location block instead:

location ~ ^/(.*?)/(.*?)/?$ {
    add_header name value;
}

This regular expression should match all URIs of the format /something/something with an optional trailing slash. Inside the block, you have the variables $1 and $2 available which are mapped to the first and second wildcard group (.*) respectively.

In case you're interested, I personally like to use Regex101 to test regular expressions.

Have another answer? Share your knowledge.