@zuohuadong
2017-01-04T10:32:31.000000Z
字数 994
阅读 578
UPYUN
路由这个问题本来只是web后端才考虑的问题,但随着前端工程化,尤其是前后端分离之后成为了前端不得不解决的一个问题。
Laravel (Nginx配置)
location / {try_files $uri $uri/ /index.php?$query_string;}
Wordpress (Nginx配置)
location / {try_files $uri $uri/ /index.php?q=$uri&$args;}
其实简单来说,就是把所有网址都交给后端index.php来处理了。(当然,规则里其实排除了jpg等静态文件,这里忽略掉了)
现在前端也遇到类似的问题:也就是需要把网址交给index.html来处理。
Nginx 规则如下:
location / {if (!-e $request_filename) {rewrite ^(.*)$ /index.html?s=$1 last; break;}}
简单举例:以这个网站来说 https://spa-demo.ibenchu.com/
我们点击任意功能,其实可以看到网址在变(实际页面是没有完全刷新的)
类似这样:https://spa-demo.ibenchu.com/dashboard/general/chat
但是我们通过这个网址去访问,却发现无法访问。
这是由于 https://spa-demo.ibenchu.com/dashboard/general/chat 并没有转发给index.html 所引起的。
如果考虑前端工程化趋势,这样的规则就必须存在。但这个我在UPYUN上确实没有找到合适的解决方案。
rule: $WHEN($NOT($MATCH($_URI,^/index.html)))/index.html?s=$1pattern: ^/(.*)
如果按照上面写,那么地址栏里面访问的是哪个url,浏览器地址栏显示的就是哪个url,但是回源实际访问的是 转化后带参的url。
如果用了跳转的方式,那么地址栏显示的是转化后带参的url ,回源也是转换后带参的url。
但是。如果想实现非跳转,并且url 地址栏是转化后带参的url ,回源也是转化后带参的url ,那么目前实现不了的。
也就是说目前无法实现访问 www.website.com/ddd 由index.html?s=ddd 来处理(浏览器仍旧显示原来的网址)