OECP社区中需要对博客标签进行url重写,把类似“/blogs/tag/tagIndex?key=业务组件”的url转成“/blogs/tag/业务组件”(其中粗体的是标签关键字),但是配置完后点击链接时后台总是循环报错。
下面是我配置的重写规则
<rule> <note>博客标签</note> <from>^/blogs/tag/(.*)/$</from> <to>/blogs/tag/tagIndex\?key=$1</to> </rule> <outbound-rule> <note>博客标签反向url</note> <from>/blogs/tag/tagIndex\?key=(.*)$</from> <to>/blogs/tag/$1/</to> </outbound-rule>
看上去没什么问题。反向url解析也是正常的。但是点击链接时总是在循环报错。
通过跟踪后发现链接请求是先通过urlrewrite过滤器,将请求的链接/blog/tag/业务组件与规则匹配后转换成/blog/tag/tagIndex?key=业务组件。然后使用新链接地址通过Request的forward进行跳转,又经过urlrewrite过滤器时问题出现了,本应该直接跳转的链接/blog/tag/tagIndex?key=业务组件又与规则^/blogs/tag/(.*)$ 匹配。过滤器代码中形成了死循环链接被不断的重写,直至无法解析报错。
找出问题原因后修改就简单了。由于解析后的链接都包含tagIndex?key=开头,只要排除以tagIndex?key=的tag关键字就了。稍加改动后就变成如下。
博客标签urlrewrite规则
<rule> <note>博客标签</note> <from>^/blogs/tag/([^tagIndex\?key=].*)/$</from> <to>/blogs/tag/tagIndex\?key=$1</to> </rule>
添加上[^tagIndex\?key=]后重启服务器问题解决。
本文转自http://po-soft.com/hi/wlo_o/blog/1966。转载请注明出处。
更多内容请访问OECP社区