我正在尝试让nginx
与我的基于pushState
的URI处理一起使用,而backbone.js
在Javascript应用程序中为我管理。
现在访问一个级别的URI,例如。 example.com/users
可以很好地工作,但不适用于两层或更深的URI,例如Backbone documentation中提到的example.com/users/all
:
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
因此,由于不熟悉nginx的重写选项,我仍然可以执行
rewrite ^ /index.html;
之类的操作来将所有内容重定向到
index.html
,但是会丢失存储在同一服务器上的所有最终静态文件(图像,javascript和css)我需要能够访问。
那么,如何使用下面显示的当前配置来完成此工作?
server {
listen 80;
server_name example.com;
location / {
root /var/www/example.com;
try_files $uri /index.html;
}
}
请您参考如下方法:
这是我对应用程序所做的。每条以'/'结尾的路由(除了自身根)都将使用index.html
:
location ~ ^/.+/$ {
rewrite .* /index.html last;
}
您还可以为您的路线添加前缀:
Backbone.history.start({pushState: true, root: "/prefix/"})
接着 :
location ~ ^/prefix/ {
rewrite .* /index.html last;
}
或为每种情况定义一个规则。