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; } }
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With