Add slash to the end of every url (need rewrite rule for nginx)

Viewed 96127

I try to get an "/" to every urls end:

example.com/art

should

example.com/art/

I use nginx as webserver.

I need the rewrite rule for this..

For better understanding check this:

http://3much.schnickschnack.info/art/projekte

If u press on a small thumbnail under the big picture it reloads and shows this url:

http://3much.schnickschnack.info/art/projekte/#0

If i now have a slash on all urls (on the end) it would work without a reload of the site.

Right now i have this settings in nginx-http.conf:

server {
  listen *:80;
  server_name 3much.schnickschnack.info;
  access_log /data/plone/deamon/var/log/main-plone-access.log;
  rewrite ^/(.*)$ /VirtualHostBase/http/3much.schnickschnack.info:80/2much/VirtualHostRoot/$1 last;
  location / {
    proxy_pass http://cache;
  }
}

How do I configure nginx to add a slash? (I think i should a rewrite rule?)

10 Answers

This rule solves query string case too:

location ~ ^/([^.]*[^/])$ {
  if ($query_string) {
    return 301 $scheme://$host/$1/?$query_string;
  }
  return 301 $scheme://$host/$1/;
}

The regex has taken from @marc's answer: rewrite ^([^.\?]*[^/])$ $1/ permanent;

The extra slash ^/ in regex is added to improve readability

Try this: ^(.*)$ http://domain.com/$1/ [L,R=301]

This redirects (Status code 301) everything ($1) without a "/" to "$1/"

Related