我正在构建一个使用nginx作为Web服务器提供静态文件的SPA。我需要一种方法来为root index.html文件提供一些路由:
但仍然允许提供静态文件。
我尝试过很多方法,但没有一种方法可以做到。
答案 0 :(得分:3)
你应该有nginx.conf
这样的(我已经从我的一个古老的角项目中取得了这个):
server {
## Your website name goes here.
server_name example.com;
## Your only path reference.
root /var/www/example.com/public_html;
## This should be in your http block and if it is, it's not needed here.
index index.html;
autoindex off;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.html break;
}
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
第一个和第二个location
规则适用于不需要任何特殊检查的常见文件,并经常从机器人和浏览器中请求。
第三条规则说,如果请求的文件(相对网址)不存在,则会提供index.html
。此文件是SPA的主文件。如果此规则与请求匹配,则break
关键字将停止该过程。
最后一条规则说,如果请求的文件以js,css,png,...(您的静态资产)结尾,它将是服务器,没有任何重写。 通过这种方式,您可以将资产放在任何目录中而不会出现麻烦。
P.S。我在我的角应用中也使用了$locationProvider.html5Mode(true);
来获得真实的网址,并且它的效果非常好。