java url重写过滤规则

时间:2015-07-28 12:58:34

标签: java jsp servlets tuckey-urlrewrite-filter

我正在使用tuckey rewrite filter制定一些规则来映射网址,例如得到以下内容:

<urlrewrite>
<rule>
    <from>^/intro</from>
    <to>w?page=intro</to> 
</rule>

<rule>
    <from>^/([a-z0-9]+)/([a-z0-9-]+)$</from>
    <to>/w?category=$1&amp;post=$2</to> 
</rule>
</urlrewrite>

在第二条规则中我匹配java/variables之类的东西,一切正常但是......

1。如何匹配规则中的所有内容,我想将unknown/page/will/not/be/found/introduction等网页重定向到自定义网址。

对于长网址(超过2个单词,如java / variables / others),这种方法很好,但我怀疑它是最好的解决方案,仍然找不到/introduction

<rule>
    <from>^/([a-z0-9]+)/([a-z0-9-]+)/([a-z0-9-/]+)$</from>
    <to>/w?page=$1+$2+$3</to> 
</rule>

最后一个正则表达式([a-z0-9-/]+)/作为字符串,并将其作为参数发送给servlet。

2。没有办法在域名后立即捕获所有网址?例如,在/ mydomain.com/之后,我尝试了下一个,但最终陷入无休止的错误循环:

<rule>
    <from>^/([a-z0-9-/]+)$</from>
    <to>w?page=$1</to> 
</rule>

尝试:

<rule>
    <from>^/([a-z0-9-/]+)$</from>
    <to>/w?page=$1</to> 
</rule>

抓住一切,但似乎都不起作用。

1 个答案:

答案 0 :(得分:0)

如果要匹配规则中不存在的所有内容,可以在末尾添加规则以捕获任何其他规则未匹配的内容。您需要排除您指向的页面,否则您将进入无限重定向循环

<rule>
    <from>^/(?!mypage)(.*)$</from>
    <to last="true">/mypage?myparam=$1</to>
</rule>

我认为这也回答了问题2?

热门提示 - 您可以使用此URL

查看规则的实时状态(仅限localhost)
http://127.0.0.1:8080/rewrite-status