1 回答

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊
當(dāng)然不是你想的這樣,否則也太蠢了不是么?
問(wèn)題在于你需要明白一件事情:前端路由是在頁(yè)面內(nèi)的 js 代碼加載并執(zhí)行完成之后才能正常工作的,當(dāng)它開(kāi)始工作的時(shí)候,URL 的變化就不再是傳統(tǒng)意義上的刷新,而是跟蹤 history 的變化。
那么什么時(shí)候加載成功了呢?一般來(lái)說(shuō)就是通過(guò) index.html
來(lái)加載的(這就是 spa 的最基本形態(tài))
你手動(dòng)刷新了非根路徑的 URL 之后為什么 404 呢?很顯然,這一次刷新之后得到的響應(yīng)是你的后端提供的,并且不再是 index.html
了,那么你既沒(méi)有后端對(duì)應(yīng)的路由也無(wú)法通過(guò) index.html
加載前端路由,不 404 還能是什么呢?
你有兩種選擇,一難一易。
難的是做同構(gòu)處理,也就是前后端使用同一套路由,react router 本身是支持同構(gòu)的,你可以參考它文檔里關(guān)于 isomorphic 或 server side rendering 相關(guān)的內(nèi)容。
易的是后端做全局路由匹配,無(wú)論是發(fā)過(guò)來(lái)的請(qǐng)求 URL 是什么,統(tǒng)統(tǒng)返回 index.html
讓前端去匹配不同的 URL。
添加回答
舉報(bào)