Sgarz
Sgarz

Reputation: 331

Nginx rewrite rules additional arguments

I'm breaking my head on Nginx rewrite rules while migrating from Apache to Nginx.

I had .htaccess rewrite rules that made /search/foo+bar/2&pricerange=20-50 to search.php?search=foo+bar&page=2&pricerange=20-50 and I could access all the arguments like you would expect with $_GET['search'], $_GET['page'] and $_GET['pricerange']

But now with Nginx I have issues with this appended arguments like pricerange. Whenever I visit /search/foo+bar/2&pricerange=20-50 it does not translate the pricerange argument. And when I visit the same url without the page number the pricerange argument gets added to the search argument. But only when I'm using more than one word concatenated with +'s.

My current Nginx rewrite rules:

location / { try_files $uri /index.php$is_args$args; rewrite ^/search/(.*)/(.*)/$ /search?search=$1&page=$2 last; rewrite ^/search/(.*)/(.*)/?$ /search?search=$1&page=$2 last; rewrite ^/search/(.*)/$ /search?search=$1 last; rewrite ^/search/(.*)/?$ /search?search=$1 last; }

Upvotes: 0

Views: 684

Answers (1)

Rhim
Rhim

Reputation: 674

GET arguments begin after the '?'
/search/foo+bar/2&pricerange=20-50
You need to replace '&' with '?' or rewrite rule

rewrite ^/search/(.*)/([0-9]+)&pricerange=(.*)$ /search?search=$1&page=$2&pricerange=$3 last;

Upvotes: 1

Related Questions