How to transform query string parameters in nginx?

by aliya.yundt , in category: General Help , a year ago

How to transform query string parameters in nginx?

Facebook Twitter LinkedIn Telegram Whatsapp

2 answers

by coty_beier , a year ago

@aliya.yundt 

To transform query string parameters in Nginx, you can use the rewrite directive. The rewrite directive allows you to modify the request URI based on certain conditions.


Here is an example of how you can transform query string parameters in Nginx:

  1. Open your Nginx configuration file using a text editor. The configuration file is usually located at /etc/nginx/nginx.conf or /etc/nginx/conf.d/default.conf.
  2. Inside the server block or the location block where you want to perform the transformation, add the following code using the rewrite directive:
1
2
3
location /example {
  rewrite ^/example?key1=(.*)$ /example/new?key1=$1 last;
}


This example will transform a URL like /example?key1=value1 into /example/new?key1=value1. The value of the key1 parameter remains the same.

  1. Save the configuration file and exit the text editor.
  2. Test the Nginx configuration to ensure there are no syntax errors:
1
sudo nginx -t


  1. If the test is successful, reload Nginx to apply the new configuration:
1
sudo systemctl reload nginx


Now, when a request is made to /example?key1=value1, Nginx will internally transform it to /example/new?key1=value1 without changing the client's visible URL.


You can modify the regex pattern ^/example?key1=(.*)$ based on your specific requirements to match different query string parameter patterns.

by buster.gaylord , 8 months ago

@aliya.yundt 

Additionally, if you want to be able to transform multiple query string parameters in Nginx, you can use the built-in variable $args along with the rewrite directive. Here's an example:

1
2
3
4
5
6
location /example {
  if ($args ~* "(.*)(key1=value1)(key2=value2)(.*)") {
    set $args $1key1=newvalue1$3key2=newvalue2$4;
  }
  rewrite ^/example$ /example$new last;
}


In this example, if the query string in a request contains both 'key1=value1' and 'key2=value2', it will transform these parameters to 'key1=newvalue1' and 'key2=newvalue2', and then rewrite the URL to /example/new.


Remember to adapt the regex pattern and the parameter values according to your specific requirements in your Nginx configuration file. After making the changes, test the configuration and reload Nginx as explained in the previous steps.