我正在使用带有Java / Jersey REST API的AngularJS 1.3 webapp。我终于让html5mode与Tuckey UrlRewriteFilter一起工作了,所以像 localhost:8080 /#/ page 这样简单的东西现在只是 localhost:8080 /页 即可。但是,我似乎无法获得更复杂的东西,如 localhost:8080 / mypage / category / subcategory / item 正常工作。在单个浏览器选项卡中,此URL将以html5mode加载,但如果我在新选项卡中打开该链接,则会获得404。
以下是我的pom和web.xml文件:
的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>
我仔细阅读了UrlRewriteFilter文档here并尝试使用通配符匹配和正则表达式语法的不同变体,但我总是得到404.
我还要补充一点,我正在使用angular-ui-router版本0.2.13,我的网页/状态的网址看起来像 / mypage /:category /:subcategory /:item < /强>
所以我的问题是我如何匹配这种模式,以便重定向到index.html对html5mode正常工作,还是应该以不同的方式配置路由以更好地与UrlRewriteFilter一起使用?
答案 0 :(得分:0)
以下是我最终使用
的内容<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>
由于我的应用正在使用<base href="/myapp/html/">
我还必须将index.html上的引用从相对更改为href="/myapp/html/otherpage.html"
,因为例如。当在/ myapp / html / rootpage1 / page1 / something上使用相对引用时,重写将url传递给index.html,它在rootpage1 / scope上,而不是html / scope。