我正在尝试为GAE应用创建一个简短的网址,因此我使用了UrlRewriteFilter,但我无法正确设置它。基本上,用户得到了这个:
以及应该重定向到的页面是
目前正在处理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>
问题是所有网址现在都重定向到此,例如
仍然在vote.jsp上运行该页面。只有在找不到URL时,我该怎么办才能让它重定向?
答案 0 :(得分:2)
以下规则如何:
<rule>
<from>^/([\w-]+)$</from>
<to last="true">/vote.jsp?id=$1</to>
</rule>
[\w-]+
至少有一个任何单词字符(字母,数字,下划线),包括-
(短划线字符)。您可以使用^
和$
来锚定已检查文本的开头和结尾。
执行规则时,过滤器将(非常简化)循环遍历所有规则 规则和每个做类似这样的伪代码:
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)
}
这就是为什么你必须使用开头(^
)和结束($
)字符串正则表达式锚点