问题描述
我正在使用来制定一些映射URL的规则,例如获得以下内容:
<urlrewrite>
<rule>
<from>^/intro</from>
<to>w?page=intro</to>
</rule>
<rule>
<from>^/([a-z0-9]+)/([a-z0-9-]+)$</from>
<to>/w?category=$1&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.是否有任何方法可以在域后立即捕获所有URL?
例如,在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楼
如果要匹配规则中未包含的所有内容,则可以在末尾添加一个规则以捕获任何其他规则未匹配的内容。 您需要排除要定向的页面,否则最终将陷入无限重定向循环
<rule>
<from>^/(?!mypage)(.*)$</from>
<to last="true">/mypage?myparam=$1</to>
</rule>
我认为这也回答了问题2?
最重要的提示-您可以使用此URL查看规则的实时状态(仅在localhost上)
http://127.0.0.1:8080/rewrite-status