Route vue with 302 or proxy_pass or javascript

這兩天遇到的問題,整理起來放著。對 Vue 不太熟,或許有不對的地方。

公司有個網站用 vue 做的,所以會看到像 https://WEBSITE_HOST/#/path/to/destination 這樣子的網址。

這兩天其它team同事說,要把 /#/demo_path 顯示另一個網站 https://THE_OTHER_WEBSITE/ 。這樣當然用 proxy_pass 就可以簡單解決,以nginx為例的話理論上會長類似這樣。

location /#/demo_path {
    proxy_pass https://THE_OTHER_WEBSITE/;
}

但因為原本 WEBSITE_HOST 是 vue 做的,網址上有個 # ,會變成是由前端的 browser 去執行 route ,而網頁伺服器 nginx並不會收到這樣的 request。所以就只能用 javascript 去做這件事情。

if (location.href.substring(location.href.indexOf("/", 10)) == "/#/demo_path" || 
    location.href.substring(location.href.indexOf("/", 10)) == "/#/demo_path/") {
    location.href="https://THE_OTHER_WEBSITE/";
}

後來該team 討論過之後決定改用 302 redirect,且把網址改成 /demo_path,那這樣就變成。

location /demo_path {
    rewrite ^/(.*) https://THE_OTHER_WEBSITE/ redirect;
}