Rewrite nginx cut last location - nginx

I would like to rewrite the following URL http://example.net/bar/foo to http://example.net/bar.
Do you know how to do this ?

Use this :
location /bar {
rewrite ^/bar/(.*)/[^/]+$ /bar/$1;
}

Related

Permanent redirection between folders with nginx?

On the nginx configuration file
default
at
/etc/nginx/sites-enabled/
I am trying to redirect requests made to the folder "home" to another folder "jp".
Following the nginx manual,
I tried the script below. Any ideas as to why this would't work? Thanks.
server{
...
server_name _localhost;
location /home/ {
rewrite www.example.io/home/$ www.example.io/home/jp/ permanent;
}
}
You want a permanent redirection from /home/ to /home/jp/.
The first parameter to a rewrite directive is a regular expression which is matched against a normalized URI, in your case /home/.
You can use a rewrite directive, for example:
location /home/ {
rewrite ^/home/$ /home/jp/ permanent;
...
}
Alternatively, you could use an exact match location with a return statement, for example:
location = /home/ {
return 301 /home/jp/;
}

nginx rewrite rule with query parameter

My URL looks like:
localhost/video-detail?videoID=T0r-uCXvDzQ
I want to serve a page with name: T0r-uCXvDzQ.html (videoID.html) which is present in server's file system.
I am trying to write the rewrite rule as follows:-
location / {
rewrite ^/video-detail?videoID=(.*) /$1.html;
}
Also tried:
location / {
rewrite ^/video-detail?videoID=(.*) /$arg_videoID.html;
}
But they are giving 404 error.
How can I use the query parameters in the output rewrite rule.
The following worked for me:-
if ($args ~* "videoID=(.*)") {
set $key1 $1;
rewrite ^(/video-detail)$ /$key1.html;
}

Nginx rewrite URL, change parts of URL

Is it possible in Nginx to rewrite URL like this?
http://www.example.com/city/person/contact.php?id=name
to
http://www.example.com/city/person/name/contact
How about:
location ~ /city/person/(.*)/(.*) {
rewrite ^/city/person/$2.php?id=$1 last;
}

how do I rewrite a URL in nginx to an updated location?

I have the following URLs:
1) http://example.com/downloads/
2) http://example.com/downloads/widgets
3) http://example.com/downloads/gadgets
These URLs need to be redirected rewritten to the following:
1) http://example.com/products/
2 & 3 & etc) http://example.com/products/thingies
I'm currently trying the following nginx code:
location ~* ^/downloads/ {
rewrite ^/downloads/$ /products break;
rewrite ^/downloads/(.*)$ /products/thingies break;
}
It's almost working, however my site's document root is /var/www/example.com/public. So after processing the rewrite rules, nginx tries to literally serve /var/www/example.com/public/products/, whereas I want it to just rewrite to http://example.com/products/ (which then proxies to PHP and so on).
Where am I failing? Is there a different, better way to accomplish this?
Thank you for any help.
-- UPDATE --
I got it to work by using the following rules:
rewrite ^/downloads/?$ $scheme://$host/tools last;
location ~* ^/downloads/ {
rewrite ^/downloads/?$ $scheme://$host/products last;
rewrite ^/downloads/(.*)$ $scheme://$host/products/thingies last;
}
IS this the proper way of doing it in nginx? I haven't seen this rewrite rule format anywhere while researching this. It somehow seems odd.
Your update redirects, not rewrites.
Here is how I would do:
location /downloads/ {
rewrite ^ /products/thingies;
}
location = /downloads/ {
rewrite ^ /products/;
}
# uncomment if you need '/downloads' (without trailing slash) act as '/downloads/'
#location = /downloads {
# rewrite ^ /products/;
#}
The correct syntax appears to be:
location ~* ^/downloads/ {
rewrite ^/downloads/?$ /products permanent;
rewrite ^/downloads/(.*)$ /products/thingies permanent;
}

Nginx, URL rewrite: Location or $request?

I need some help to understand the Nginx rewrite function.
Imagine, a real file is at the following address:
http://www.domain.com/library/content/folder/country/page/index.html
I want to rewrite the URL, to have something better (more human readable!):
http://www.domain.com/page
1. How can I do that with Nginx?
location = /... {
rewrite ...
}
Or
if ($request ~* "page") {
rewrite ...
}
2. How can I write this rule ?
If I was using Apache, I will write something like this:
RewriteRule ^page /(.*) library/contents/folder/contry/page/$1 [L]
You can use the alias or root instructions in a location block
location /page/ {
root /my/absolute/path/library/content/folder/country/;
}
location /page/ {
alias /my/absolute/path/library/content/folder/country/page/;
}
Source: http://wiki.nginx.org/HttpCoreModule
How about
This problem is related to versioning of API based on header
INPUT url : http://abcd.com/v1/getshafts?param=q ,header = v1.1
OUTPUT : abcd.com/v1.1/getshafts/
what should be 'rewrite' value here?

Resources