nginx:将所有请求发送到单个html页面

使用nginx,我想保留的url,但实际上加载相同的网页,无论如何。 我将使用URL与History.getState()路由在我的JavaScript应用程序的请求。 这似乎应该是一个简单的事情呢?

 location / { rewrite (.*) base.html break; } 

工作,但redirect的url? 我仍然需要的url,我只是想总是使用相同的网页。

我认为这会为你做到这一点:

 location / { try_files $uri /base.html; } 

你原来的重写应该几乎工作。 我不知道为什么它会redirect,但我认为你真正想要的只是

 rewrite ^ /base.html break; 

你应该能够把它放在一个位置或直接在服务器上。

只使用try_files对我来说不起作用 – 它会在我的日志中导致重写或内部redirect循环错误。

Nginx文档有一些额外的细节:

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

所以我最终使用了以下内容:

 root /var/www/mysite; location / { try_files $uri /base.html; } location = /base.html { expires 30s; } 

正确的方法是:

 location / { rewrite (.*) base.html last; } 

使用last将使nginx根据重写的结果find一个新的合适的location块。

try_files对于这个问题也是非常有效的方法。

这对我工作:

 location / { alias /path/to/my/indexfile/; try_files $uri /index.html; } 

这使我可以创build一个javascript单页面应用程序的全部url。 所有像npm run build静态文件,如css,fonts和javascript,如果和index.html在同一个目录下,将会被发现。

如果静态文件在另一个目录中,出于某种原因,你还需要这样的东西:

 # Static pages generated by "npm run build" location ~ ^/css/|^/fonts/|^/semantic/|^/static/ { alias /path/to/my/staticfiles/; }