2017-08-08 105 views
1

我有一個react應用程序在dropwizard服務器上運行。/ui提供bundle.js。當我在/ ui上打開url並導航應用程序(和goto/ui/content)時,它工作正常。但是,當我嘗試刷新/ app/content這樣的特定頁面時,它會顯示404使用dropwizard應用程序進行配置更改以使用瀏覽器歷史記錄

我知道客戶端渲染和服務器端渲染,並且我需要爲/ ui調用GET,並將剩餘的路由到客戶端,但我找不到任何文檔,以瞭解如何在dropwizard

我也知道使用hashHistory代替browserHistory會工作(因爲URL的哈希部分沒有發送到服務器),但我想知道這是否可以使用browserHistory完成。

有關於如何配置express服務器的文檔,但我找不到jetty/dropwizard的任何內容。

回答

2

在Dropwizard級別,您可以使用一個使用servlet過濾器重寫URL的東西。一種流行的實現是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.xml配置文件添加到您src/main/resources,添加重寫規則

    <urlrewrite> 
        <rule> 
         <from>^/(?!(api|static/|manifest\.json|assets-manifest\.json|favicon\.ico)).*$</from> 
         <to type="forward">/index.html</to> 
        </rule> 
    </urlrewrite> 
    

    以上規則指出,如果請求路徑與上述正則表達式匹配,則將請求轉發給index.html文件。我曾經測試過的是create-react-app,其中輸出是匹配器中列出的幾個文件。這些文件不應該轉發。

    正則表達式使用負向預測,所以它就像一個否定。它可能看起來像我說的,如果路徑匹配這些文件,然後轉發,但實際上是相反的。如果你沒有使用create-react-app,那麼你的正則表達式看起來會不一樣。重點是否定您不想轉發的文件。

我把一個工作演示放在一起。檢查出GitHub repo

+0

這工作。謝謝。有沒有辦法,我可以從app.yml而不是配置文件得到這個? – Rdrocks09

+0

不是我能想到的。 –

相關問題