2014-12-30 17 views
7

Używam aplikacji webowej AngularJS 1.3 z interfejsem API REST Java/Jersey. I wreszcie html5mode pracy z Tuckey UrlRewriteFilter tak, że coś jest proste jak localhost: 8080/#/stronie jest teraz tylko localhost: 8080/strona. Ale nie mogę uzyskać czegoś bardziej złożonego, jak localhost: 8080/mypage/category/subcategory/item działa poprawnie. Ten adres URL będzie ładować w html5mode gdy w pojedynczej karcie przeglądarki, ale jeśli mogę otworzyć odnośnik w nowej karcie dostaję 404.Nie można uzyskać trybu Angular html5 i UrlRewriteFilter z określonymi adresami URL

Oto moje pom i web.xml pliki:

pom.xml

<filter> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
    <init-param> 
     <param-name>confPath</param-name> 
     <param-value>/WEB-INF/urlrewrite.xml</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 

web.xml:

<urlrewrite> 
    <rule match-type="wildcard"> 
     <from>*/page</from> 
     <to>index.html</to> 
    </rule> 

    // what should this rule look like in order to recognize a url like: 
    // localhost:8080/mypage/category/subcategory/item 
    <rule match-type="wildcard"> 
     <from>?</from> 
     <to>index.html</to> 
    </rule> 
</urlrewrite> 

czytam przez UrlRewriteFilter Documenta here i próbowałem używać różnych wariantów składni symboli wieloznacznych i składni wyrażeń regularnych, ale zawsze otrzymuję 404.

Dodam również, że używam wersji kątowej i routera 0.2.13 i mojego adresu URL dla strony/stanu, o którym mowa, wygląda jak /mypage /: category /: podkategoria /: pozycja.

Moje pytanie brzmi: jak mogę dopasować ten wzorzec, aby przekierowanie do index.html działało poprawnie dla html5mode lub czy powinienem skonfigurować routing inaczej, aby działał lepiej z UrlRewriteFilter?

Odpowiedz

0

Oto co skończyło się używając

<urlrewrite> 
<rule match-type="regex" enabled="true"> 
    <condition type="request-filename" operator="notfile" /> 
    <condition type="request-filename" operator="notdir" /> 
    <condition type="request-uri" operator="notequal">(\.html|\.js)</condition> 
    <from>^/html/(.*rootpage1.*|.*rootpage2.*)$</from> 
    <to last="true">/html/index.html</to> 
</rule> 

Jak moja aplikacja korzysta <base href="/myapp/html/">

miałem też zmienić referencje na moim index.html od względem href="/myapp/html/otherpage.html" bo np . gdy używasz względnych odniesień na/myapp/html/rootpage1/page1/something, a przepisanie przechodzi od adresu url do index.html, to jest na rootpage1/scope, a nie html/scope.