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/; }