在Google App Engine(Java)上捕获所有URL重写

时间:2013-01-25 13:51:52

标签: java google-app-engine url-rewriting

我正在尝试为GAE应用创建一个简短的网址,因此我使用了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>

问题是所有网址现在都重定向到此,例如

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

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

1 个答案:

答案 0 :(得分:2)

以下规则如何:

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

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


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) 
}

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