Urlrewrite配置不当造成死循环问题解析

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社区

你可能感兴趣的:(Blog)