1

I want to use the location and convert a URL to GET parameters in my server. I don't care if it is one, two or more params in the URL but it would be something like this, if I go to this URL

https://www.example.com/page/one/two/three/ ....

it should send me to this

https://www.example.com/page/index.php?site=one&id=two&args=three ....

I set up my code to get up to the first parameter in the URL but I cannot break it down further, it will always return everything after page/ together in one paramemter

        location ~ ^/page/(.*)$ {
            try_files $uri /page/index.php?site=$1
        }

any suggestions?

aEVA12
  • 13
  • 2

1 Answers1

0

You need to improve the scope of the captures in your regular expression. The capture (.*) will absorb anything and is greedy. You could a lazy quantifier in the capture (e.g. (.*?)), or a character class which excludes the separating / (e.g. ([^/]+)).

For example, to implement the three cases as separate rules:

location ~ ^/page/([^/]+)/([^/]+)/([^/]+) {
    try_files $uri /page/index.php?site=$1&id=$2&args=$3;
}
location ~ ^/page/([^/]+)/([^/]+) {
    try_files $uri /page/index.php?site=$1&id=$2;
}
location ~ ^/page/([^/]+) {
    try_files $uri /page/index.php?site=$1;
}

Regular expressions are evaluated in order until a match is found, so the more specific rule must be placed before a less specific rule. Also, these will all need to be placed after the location ~ \.php$ block, otherwise your PHP URIs will break.

See this useful resource on regular expression syntax.

Richard Smith
  • 11,859
  • 2
  • 18
  • 26