Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rewriting nginx for pushState-URL's

Tags:

I am trying to get nginx to work with my pushState-based URI handling that backbone.js manages for me in an Javascript app.

Right now accessing URI's with one level, eg. example.com/users works well, but not two-level or deeper URI's, such as example.com/users/all, which is mentioned in the Backbone documentation:

For example, if you have a route of /documents/100, your web server must be able to serve that page, if the browser visits that URL directly

So, being far from acquainted with nginx's rewrite options, I am still sure that I can do something like rewrite ^ /index.html; to redirect everything to my index.html, but loosing out on any eventual static files (images, javascript & css) stored on the same server which I need to be able to access.

So what should I do instead with the below shown, current configuration, to make this work?

server {     listen   80;     server_name  example.com;      location / {         root   /var/www/example.com;         try_files $uri /index.html;     }  } 
like image 843
Industrial Avatar asked Feb 07 '12 22:02

Industrial


1 Answers

I ended up going with this solution:

server {      listen 80;     server_name example.com;     root /var/www/example.com;      # Any route containing a file extension (e.g. /devicesfile.js)     location ~ ^.+\..+$ {         try_files $uri =404;     }      # Any route that doesn't have a file extension (e.g. /devices)     location / {         try_files $uri /index.html;     }  } 

This way, at least I still get proper 404 errors if a file isn't found.

like image 121
ChrisC Avatar answered Jan 03 '23 01:01

ChrisC