java - Tuckey UrlRewrite 中的正则表达式

标签 java regex url-rewriting tuckey-urlrewrite-filter

我正在使用Tuckey URLRewrite我需要一个接受除“/”或“\”之外的所有内容的规则

我已经编写了一条规则,但 tuckey 显示无休止的异常并且不加载页面

    <rule>
        <from>^/post/([^/\n\\]+)/type/([a-z]+)$</from>
        <to>/post/?slug=$1&amp;type=$2</to>
    </rule>

来自regexr我已经验证这个表达式“([^/\n\]+)”将选择除“/”或“\”之外的所有内容,但我遇到了异常。我错过了什么吗?

以下是异常(exception)情况:

at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:281)
    at org.tuckey.web.filters.urlrewrite.RuleBase.matchesBase(RuleBase.java:205)
    at org.tuckey.web.filters.urlrewrite.NormalRule.matches(NormalRule.java:92)
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRuleProcessing(RuleChain.java:83)
    at org.tuckey.web.filters.urlrewrite.RuleChain.process(RuleChain.java:137)
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:144)
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
    at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171)
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
    at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171)
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339)
    at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171)

。 。 继续..

最佳答案

OP 有这样的规则:

<rule> 
<from>^/post</from> 
<to>/post/</to> 
</rule> 

<rule> 
<from>^/post/([^/]+)</from> 
<to>/post/?slug=$1</to> 
</rule> 

<rule> 
<from>^/post/([^/]+)/type/([a-z]+)$</from> 
<to>/post/?slug=$1&amp;type=$2</to> 
</rule> 

显然,问题出在规则的排序上。由于第一个模式: ^/post 会覆盖以 /post 开头的任何内容,并导致以下模式,例如 ^/post/([^/]+)/type/([a-z]+)$ 完全被忽略。

这些规则需要像这样重新排序:

<rule> 
<from>^/post/([^/]+)/type/([a-z]+)$</from> 
<to>/post/?slug=$1&amp;type=$2</to> 
</rule> 

<rule> 
<from>^/post/([^/]+)</from> 
<to>/post/?slug=$1</to> 
</rule> 

<rule> 
<from>^/post</from> 
<to>/post/</to> 
</rule> 

将通用的包罗万象的类型规则置于特定的目标规则之下。

关于java - Tuckey UrlRewrite 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27969459/

相关文章:

Java Swing : main class wait until JFrame is closed

java - 访问网络路径中的文件

regex - 仅当两者都存在时才从字符串的开头和结尾删除引号

Javascript正则表达式阻止匹配内部标签

html - 页面 URL 可以与文件名不同吗?

apache - Htaccess 中 RewriteRule 后的 PHP 和非 PHP 访问 URL

apache - 如何修改此 .htaccess 规则以便它可以适应两种情况?

Java 语音 API 教程?

java - 有没有办法在不区分大小写的情况下比较 2 个字符串?

javascript - 正则表达式或