[关闭]
@zuohuadong 2017-01-04T10:32:31.000000Z 字数 994 阅读 578

UPYUN Rewrite 与前端工程化路由问题

UPYUN


起因

路由这个问题本来只是web后端才考虑的问题,但随着前端工程化,尤其是前后端分离之后成为了前端不得不解决的一个问题。

Laravel (Nginx配置)

  1. location / {
  2. try_files $uri $uri/ /index.php?$query_string;
  3. }

Wordpress (Nginx配置)

  1. location / {
  2. try_files $uri $uri/ /index.php?q=$uri&$args;
  3. }

其实简单来说,就是把所有网址都交给后端index.php来处理了。(当然,规则里其实排除了jpg等静态文件,这里忽略掉了)

现在前端也遇到类似的问题:也就是需要把网址交给index.html来处理。

Nginx 规则如下:

  1. location / {
  2. if (!-e $request_filename) {
  3. rewrite ^(.*)$ /index.html?s=$1 last; break;
  4. }
  5. }

问题

简单举例:以这个网站来说 https://spa-demo.ibenchu.com/
我们点击任意功能,其实可以看到网址在变(实际页面是没有完全刷新的)
类似这样:https://spa-demo.ibenchu.com/dashboard/general/chat
但是我们通过这个网址去访问,却发现无法访问。
这是由于 https://spa-demo.ibenchu.com/dashboard/general/chat 并没有转发给index.html 所引起的。

UPYUN

如果考虑前端工程化趋势,这样的规则就必须存在。但这个我在UPYUN上确实没有找到合适的解决方案。

  1. rule: $WHEN($NOT($MATCH($_URI,^/index.html)))/index.html?s=$1
  2. pattern: ^/(.*)

如果按照上面写,那么地址栏里面访问的是哪个url,浏览器地址栏显示的就是哪个url,但是回源实际访问的是 转化后带参的url。

如果用了跳转的方式,那么地址栏显示的是转化后带参的url ,回源也是转换后带参的url。

但是。如果想实现非跳转,并且url 地址栏是转化后带参的url ,回源也是转化后带参的url ,那么目前实现不了的。

也就是说目前无法实现访问 www.website.com/ddd 由index.html?s=ddd 来处理(浏览器仍旧显示原来的网址)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注