Tuckey UrlRewriteFilter不适用于主机不等的多个条件

时间:2014-07-16 16:42:11

标签: url-rewriting tuckey-urlrewrite-filter

当我的网址为localhost:8080时,以下针对Tuckey UrlRewriteFilter的规则错误地导致localhost:8080重定向到www.example.com。

这种行为似乎与Tuckey UrlRewriteFilter参考手册相反!

我想要的是localhost:8080在没有重定向的情况下保持不变,以允许在本地计算机上进行测试。

我希望避免不在example.com域中的不需要的网址被搜索引擎编入索引。不需要的URL具有不同的域,但指向相同/重复的example.com页面。

<urlrewrite>
    <rule>
        <name>Avoid wrong hostname's pages being indexed by search engines</name>

        <condition name="host" operator="notequal" next="and">www.example.com</condition>
        <condition name="host" operator="notequal" next="and">localhost:8080</condition>

        <from>^/(.*)</from>
        <to type="permanent-redirect" last="true">http://www.example.com/$1</to>
    </rule>

替代:

我还尝试了另一种方法:删除所有条件元素,并改变&#34;来自&#34;是:

   <from>^/(^www.example.com|^localhost:8080)(\?.*)?$</from>

即。不等于example.com而不等于localhost - 但是这有同样的问题。

2 个答案:

答案 0 :(得分:1)

我遇到了和你一样的问题,但是找不到使用tuckey的解决方案。我最终通过在Spring中使用拦截器来解决localhost-test和域名一致性的兼容性问题。我的代码就像这样

public boolean preHandle(HttpServletRequest request,
    HttpServletResponse response, Object handler) throws Exception {
String url = request.getRequestURL().toString();
if (!url.startsWith("http://localhost") && !url.startsWith("http://www.example.com")){
    response.sendRedirect("http://www.example.com"+request.getRequestURI());
    return false;
}
return true;}

但是检查每个请求都会有必要的开销。希望这有帮助!

答案 1 :(得分:0)

因为你正在使用正则表达式匹配类型,请尝试给条件正则表达式。例如。 <condition name="host" operator="notequal">^www.example.com$</condition>