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?
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:
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.