這兩天遇到的問題,整理起來放著。對 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; }