2016-08-07 8 views
0

私は現在、単一ページのReactアプリケーションにfirebaseホスティングを使用しています。私はまた、404.htmlページを私のパブリックディレクトリに追加しました。私の前提は、ユーザーが自分のルートにない(反応ルータを使用している)URLを入力した場合にこのページが表示されるということですが、firebaseがURLが有効かどうかを知る方法はありません。現在、私の主なアプリケーションURLの/の後に何かランダムに入力すると、ページは空白になります。私のリアクションアプリ内でこれを説明する必要があるのでしょうか?React SPAにfirebaseホスティングを使用して404ページを提供するにはどうすればよいですか?

+1

あなたのfirebase.jsonには「ソース」:「**」 'rewriteが含まれているはずです。つまり、すべてのURLをメインページに書き換えています。 Firebase Hostingは反応ルータを使用していることを知らないため、不一致のルートを検出することはできません。したがって、クライアント側のリアルーター構成にデフォルト/キャッチオールルートを追加する必要があります。これは有望そうです:http://stackoverflow.com/questions/32128978/react-router-no-not-found-route –

+0

あなたのルータの設定方法については、どのコードも共有できますか? – KumarM

答えて

1

リアクタルーターは、クライアント側で404ページを処理できるようにすることができます。これは、どのようにすることができますセットアップ:キャッチすべてのルート(*)は、ルータが他のすべてを試し、最終的にこれに取得することができリアクト最後にそうでなければならないこと

var NotFound = React.createClass({ 
    render: function() { 
     return (<h1>Page Not Found</h1>); 
    } 
}); 

var App = React.createClass({ 
    render: function() { 
     <Router history={browserHistory}> 
      <Route path="/" component={App}> 
       <Route path="first" component={SomeComponent}/> 
       <Route path="second" component={SomeOtherComponent}/> 
       <Route path="*" component={NotFound}/> 
      </Route> 
     </Router> 
    } 

}); 

注意。

Here'sこれを説明する素敵な記事です。

4

これはfirebase.jsonの設定を使用して部分的に解決できますが、Firebaseホスティングは静的コンテンツのみを提供するため、JavaScriptのロジックの一部を処理する必要があります。 /users/foo/index.htmlへのルートだろう、上記の例では

{ 
    "hosting":{ 
    "rewrites":[ 
     {"source":"https://stackoverflow.com/users/*","destination":"/index.html"}, 
     {"source":"/account","destination":"/index.html"}, 
     {"source":"/posts/*","destination":"/index.html"}, 
    ] 
    } 
} 

:しかし、あなたは、インスタンスのために、アプリケーションのルート構造を一致させるために、より具体的な書き換えを作成することができます

{ 
    "hosting":{ 
    "rewrites":[{"source":"**","destination":"/index.html"}] 
    } 
} 

:シンプルなキャッチオールは次のようになります/unknown/url404.htmlにルーティングされます。

上記はあなたのところにあるようですが、実際のアプリケーションデータについてはわかりません。 /users/fooが有効なユーザー名でない場合は、JavaScriptを使用して見つからないメッセージを/index.htmlに表示する必要があります。

関連する問題