I have the following nginx rewrite rule.
location /search {
rewrite ^/search/([^/]*)\.html$ /search/?search=$1 break;
try_files $uri $uri/ =404;
}
I want this to be like from:
http://test.com/search/?search=nginx
to:
http://test.com/search/nginx.html
thank you very much.
You haven't specified which part isn't working. However, it looks like an incomplete solution in any case, as you're missing a full-cycle loop.
Take a look at nginx redirect loop, remove index.php from url and https://serverfault.com/a/568902/110020 — the idea is create a redirect loop, but break it due to the differences in external vs. internal redirect.
Try this, with the full config at https://gist.github.com/cnst/3521404dfdf5cb7b4c526b5c6dff38ff:
The above code will automatically redirect
/search/?search=nginxto/search/nginx.htmlexternally, such that the location in the browser will change, but will then process the request with the backend as if no such redirect has ever happened.