原因解析:
之所以你在瀏覽器內可以由首頁跳轉到其他路由地址,是因為這是由前端自行渲染的,你在React Router定義了對應的路由,腳本並沒有刷新網頁訪問后台,是JS動態更改了location。
當你刷新時,你首先是訪問的后台地址,然后返回的頁面內加載了React代碼,最后在瀏覽器內執行;也就是說如果這個時候報404,是因為你后台並沒有針對這個路由給出返回HTML內容,也談不上執行React Router了。
解決方案一:
如果你期望所有的路由都由React Router來定義,只有你的后台,無論任何路徑,都返回index.html就好了。剩下的事情交給React Router。那么你要做的就是修改后台服務器,可以放在apache,也可以放在你的java路由內做一個通配路徑處理。
解決方案二:
關鍵點是要明白客戶端路由和服務端路由的區別。服務端路由,不同的服務器配置的方式不同,樓主自己查。另外一種簡單的解決方法,使用HashRouter,不要使用BrowserRouter,這樣所有的請求都會定位到index.html這一個頁面,服務器端也不需要任何配置了。
import {
BrowserRouter as Router,
Route,
Link
} from 'react-router-dom';
#改為
import {
HashRouter as Router,
Route,
Link
} from 'react-router-dom';
就是把 BrowserRouter改成HashRouter即可。

