hash模式和history模式的差异是什么?
拿这个地址为例:
http://xxx.com#about
http://xxx.com/about
hash
模式
由于http
请求并不包含hash
,所以不管hash
值为多少,服务器端收到的请求始终都是/
。
history
模式history
模式下,后面的/about
路径会被服务器接收到,然后尝试去处理这个/about
。
为什么hash模式不用配置,history模式却要?
这是因为hash
模式的路由path
值并不会传递给后端,所以你的任意path
,对后端来说都不可见,它只会认为你在访问根目录的index.html
。
而history
模式的路由path
会传递到后端,后端会尝试把前端路由当成后端路由来处理,也就会造成非预期的结果。
ps:这也是为什么在history
模式下,只要你在根路由不切换路由到其他路由,再怎么刷新也是可以正常使用的原因,因为根路由没有额外的路由path
传递给后端去解析。
怎么解决?
其实和hash
模式的原理是相通的,hash
模式时,路由默认就不会被传递到后端,但是history
模式会,那么在history
模式下,我们只需要按照这个思路,将前端传来的路由忽略掉就行了。
下面这段nginx
配置就是起到这样的作用,对那些后端不存在的请求的路由请求,直接返回index.html
。这样就可以让前端接管路由了。
location / {
# 表示首先尝试以文件形式提供请求的内容
# 然后以目录形式提供
# 最后如果都失败则返回 index.html 页面
try_files $uri $uri/ /index.html;
}
nginx如何配置子应用?
3
个目标应用
# 主应用
http://xxx.com/
# 子引用1
http://xxx.com/child-project1
# 子引用2
http://xxx.com/child-project2
对应的nginx
配置:
# 主应用
location / {
try_files $uri $uri/ /index.html;
}
# 子应用1
location /child-project1 {
try_files $uri $uri/ /child-project1/index.html;
}
# 子应用2
location /child-project2 {
try_files $uri $uri/ /child-project2/index.html;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。