我如何配置nginx的重定向URL所有的(不带前置/api
或一些静态资源如:JS /图像) index.html
? 原因是我使用HTML5按压状态URL与一个单页的应用程序。 含义的内容改变是否AJAX或JS取决于网址
我现在nginx的配置是这样的:
server {
listen 2000;
server_name localhost;
location / {
root /labs/Projects/Nodebook/public;
index index.html;
}
location /api/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:3000/;
proxy_redirect off;
}
}
location / {
try_files $uri /index.html;
}
这将检查所请求的文件是否存在,并将其返回。 如果该文件不存在,它会返回的index.html。
http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
遮罩答案几乎是一个解决方案,但是它不会给404丢失的文件(如favicon.icon)作为aschepis指出。
Nginx的会选择第一个匹配的位置。 因此,我们可以先匹配文件(这将给404,如果该文件不存在)。 并把后默认为index.html的所有网址,其中一个位置。
location /.+\..+ { # files (assuming they always have a dot)
# use eg alias to serve some files here
}
location / { # url routed by client, client gives 404 for bad urls
try_files $uri /index.html;
}
您需要添加到您的nginx的配置文件:
rewrite ^(.+)$ /index.html last;
然后说你使用Backbone.js的只是确保你重新路由到一个404页的任何非自定义路线:
routes: {
// Other routes
"*path" : "notFound"
},
notFound: function(path) {
// Load 404 template, probably of a cute animal.
}
来源: http://readystate4.com/2012/05/17/nginx-and-apache-rewrite-to-support-html5-pushstate/