2016-11-06 44 views
1

我已經配置反應過來路由器重定向任何未知的URL爲「/」:陣營路由器<redirect>沒有工作

<Router history={browserHistory}> 
    <Route path="/" component={Shell}> 
     <IndexRoute component={GithubPage}/> 
     <Route path="clock" component={ClockPage}/> 
     <Redirect from="*" to="/"/> 
    </Route> 
</Router> 

服務器已經正確配置,以任何未知的URL重定向到/index.html,它看起來像這樣:

<html> 
    <head> 
     <link href="main.css" rel="stylesheet"> 
    </head> 
    <body> 
     <main></main> 
     <script src="main.js" type="text/javascript"></script> 
    </body> 
</html> 

陣營路由器2.8.1行爲

  • /clock正確路由到ClockPage
  • /clock/est(這是一條未知的路線)甚至沒有加載應用程序。服務器正確發送/index.html,但css和js文件未加載,因爲瀏覽器正在請求/clock/main.css/clock/main.js - 哪些不存在!
  • 要解決此問題,我在我的index.html中包含了<base href="/">。現在瀏覽器正確請求/main.css/main.js,並且應用程序正確加載。它也重定向到「/」,因爲/clock/est是未知路線。但是我得到的瀏覽器控制檯這樣的警告:

警告:自動設置使用<base href>被棄用,並將在下一主要版本中刪除基本名稱。這些語義與basename有細微的差別。請明確地傳遞的基本部分的選項來createHistory

陣營路由器3.0.0行爲

在這一點上,我切換到反應路由器版本3.0.0(保持<base href="/">),並警告雲遠。未知路由仍然正確重定向到「/」。

所以我的問題是:

  1. 反應是否路由器3.0.0現在允許使用的<base href>
  2. 是我的解決方案,以重定向的URL未知爲「/」的最佳方式?

假設我將切換到react-router 3.0.0。

回答

0

如果你產生了使用的WebPack你的CSS和您正在使用的HtmlWebpackPlugin你可以注入你的CSS依賴於你的HTML模板,像這樣:

<% for (var css in htmlWebpackPlugin.files.css) { %> 
    <link href="<%= htmlWebpackPlugin.files.css[css] %>" rel="stylesheet"> 
<% } %> 

那麼你不必擔心在你的模板中使用。