2017-08-08 8 views
1

dropwizardサーバで実行中のreactアプリがあります。 bundle.jsは/ uiで提供されます。私は/ ui上のURLを開いて、アプリケーション(とgoto/ui/content)をナビゲートするとうまくいきます。しかし、/ app/contentのような特定のページをリフレッシュしようとすると、404が返されます。dropwizardアプリケーションの設定を変更して、反応するブラウザbrowserHistory

私はクライアント側のレンダリングやサーバー側のレンダリングについて知っているし、また、私はクライアント側で/ UIとルートの残りをGET呼び出しを行う必要があるが、私はdropwizardでそれを行う方法については、任意のドキュメントを見つけることができなかったこと。

私はまた、browserHistoryの代わりにhashHistoryを使用することを知っています(URLのハッシュ部分がサーバーに送信されないため)が、これはbrowserHistoryで実行できるかどうかを知りたかったのです。

expressを設定する方法に関するドキュメントがありますが、jetty/dropwizardのものは見つかりませんでした。

答えて

2

Dropwizardレベルでは、サーブレットフィルタを使用してURLを書き換えることができます。一般的な実装の1つはTucky UrlRewriteFilterです。次のようにあなたはそれを実装します:

  1. Dropwizardでフィルタを登録します。

    @Override 
    public void run(ExampleConfiguration configuration, Environment environment) { 
        FilterRegistration.Dynamic registration = environment.servlets() 
          .addFilter("UrlRewriteFilter", new UrlRewriteFilter()); 
        registration.addMappingForUrlPatterns(null, true, "/*"); 
        registration.setInitParameter("confPath", "urlrewrite.xml"); 
    } 
    
  2. <urlrewrite> 
        <rule> 
         <from>^/(?!(api|static/|manifest\.json|assets-manifest\.json|favicon\.ico)).*$</from> 
         <to type="forward">/index.html</to> 
        </rule> 
    </urlrewrite> 
    

    書き換えルールを追加し、あなたのsrc/main/resourcesに上記をurlrewrite.xml設定ファイルを追加します。ルールは、リクエストパスが上記の正規表現と一致する場合、そのリクエストをindex.htmlファイルに転送すると述べています。私がテストしたのは、create-react-appで、出力はマッチャーにリストされているファイルのいくつかです。これらのファイルは転送しないでください。

    正規表現は否定的な先読みを使用しているため、否定のようです。パスがそれらのファイルにマッチすれば、それからフォワードになると言われているように見えますが、それは実際には反対です。 create-react-appを使用していない場合、正規表現は異なるように見えます。ポイントは転送したくないファイルを無効にすることです。

作業デモをまとめました。 GitHub repoをチェックしてください。

+0

これは機能しました。ありがとう。設定ファイルではなくapp.ymlから取得できる方法はありますか? – Rdrocks09

+0

私は考えることができません。 –

関連する問題