2

我正在尝试为 GAE 应用程序创建一个短 URL,所以我使用了UrlRewriteFilter,但我无法正确设置它。基本上,用户会得到这个:

  • test.com/012a-bc

他们应该被重定向到的页面是

  • test.com/vote.jsp?id=012a-bc

目前它正在使用这样的urlrewrite.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN" "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite>

    <rule>
        <from>/([0-z]+)</from>
        <to last="true">/vote.jsp?id=$1</to>
    </rule>

</urlrewrite>

问题是所有 URL 现在都重定向到这个,例如

  • test.com/thankyou.jsp?id=0123

仍然在 vote.jsp 上运行页面。我应该怎么做才能让它仅在找不到 URL 时重定向?

4

1 回答 1

2

那么下面的规则呢:

<rule>
   <from>^/([\w-]+)$</from>
   <to last="true">/vote.jsp?id=$1</to>
</rule>

其中[\w-]+至少有一个任何单词字符(字母、数字、下划线),包括-(破折号)。您使用^and$来锚定检查文本的开头和结尾。


UrlRewriteFilter文档说

执行规则时,过滤器将(非常简化)循环遍历所有规则,并为每个规则执行类似以下伪代码的操作:

Pattern.compile(<from> element); pattern.matcher(request url);
matcher.replaceAll(<to> element); 
if ( <condition> elements match && matcher.find() ) {
    handle <set> elements (if any)
    execute <run> elements (if any)
    perform <to> element (if any) 
}

这就是为什么你必须使用开始(^)和结束($)字符串正则表达式锚点

于 2013-01-25T14:59:14.420 回答