【问题标题】:Catch-all URL rewrite on Google App Engine (Java)在 Google App Engine (Java) 上重写 URL
【发布时间】:2013-01-09 11:51:45
【问题描述】:

我正在尝试为 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 时重定向?

【问题讨论】:

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


    【解决方案1】:

    下面的规则呢:

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-20
      • 2011-04-14
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多