一舶赔、問(wèn)題描述
React項(xiàng)目部署到tomcat后扫倡,能正常訪問(wèn)和操作,但只要一刷新竟纳,頁(yè)面就報(bào)404找不到了撵溃。
二、原因
原來(lái)之所以你在開(kāi)發(fā)時(shí)候可以由首頁(yè)跳轉(zhuǎn)到其他路由地址锥累,是因?yàn)檫@是由前端自行渲染的缘挑,即在React Router定義了對(duì)應(yīng)的路由,有router更改了location,實(shí)際并沒(méi)有刷新網(wǎng)頁(yè)訪問(wèn)后臺(tái)桶略。所以頁(yè)面沒(méi)有問(wèn)題卖哎。但是部署到tomcat中,當(dāng)你刷新時(shí)删性,此時(shí)并不是之前的客戶端通過(guò)router來(lái)更改location,而是直接訪問(wèn)的后臺(tái)該頁(yè)面地址亏娜,然后后臺(tái)返回頁(yè)面到瀏覽器上。并沒(méi)有經(jīng)過(guò)前臺(tái)的路由(react所有的路由都是在index.html中來(lái)轉(zhuǎn)發(fā)蹬挺,所以必須要任何請(qǐng)求必須要經(jīng)過(guò)index.html)维贺,所以就報(bào)404了。
注:上面出現(xiàn)的問(wèn)題巴帮,react-router模式為BrowerRouter才會(huì)有這種問(wèn)題溯泣,HashRouter不會(huì)出現(xiàn)問(wèn)題虐秋,因?yàn)閔ash路徑并沒(méi)有改變路徑,只是在同一個(gè)路徑增加參數(shù)而已垃沦。
三客给、解決方案
我們需要對(duì)報(bào)404的頁(yè)面進(jìn)行重定向到index.html,剩下的就會(huì)由react-router來(lái)進(jìn)行路徑跳轉(zhuǎn)肢簿。
我們進(jìn)入tomcat目錄下的conf文件夾靶剑,編輯該目錄下的web.xml,加入下面一段代碼:
<error-page>
<error-code>404</error-code>
<location>/index.html</location>
</error-page>
重啟tomcat服務(wù)器池充,刷新頁(yè)面桩引,成功訪問(wèn)。