java - Tomcat URL 重写过滤器工作不正常

标签 java tomcat url-rewriting

我需要像这样转发一个 url

http://localhost:8080/doc/service?type=testLogin&exectype=userShow&moreparms

到:

http://localhost:8080/xyz/service?type=testLogin&exectype=userShow&moreparms

系统运行 tomcat 8.0.28 并且已经加载了 URLRewriteFilter ( http://www.tuckey.org/urlrewrite/ ),但是没有使用我在 googlecode.com 的 urlrewritefilter-site 上提到的需要放入的以下特定代码webapps/doc/WEB-INF/web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     version="2.5">

    <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
        <init-param>
            <param-name>logLevel</param-name>
            <param-value>DEBUG</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>

然后我将以下规则添加到与 web.xml 相同目录中的 urlrewrite.xml:

<urlrewrite>
    <rule>
       <from>^/doc/(.*)$</from>
       <to type="redirect">/xyz/$1</to>
    </rule>

    <outbound-rule>
    </outbound-rule>
<urlrewrite>

我在尝试访问类似的内容时收到 404 错误消息

http://localhost:8080/doc/service?type=testLogin&exectype=userShow&moreparms

如果我尝试,我也会收到 404 错误

http://localhost:8080/doc/status

示例规则如下:

<urlrewrite>
    <rule>
        <from>/doc/status/</from>
        <to type="redirect">%{context-path}/rewrite-status</to>
    </rule>
    <outbound-rule>
       <from>/rewrite-status</from>
       <to>/doc/status/</to>
    </outbound-rule>
<urlrewrite>

但是

http://localhost:8080/doc/rewrite-status

有效。

我的错在哪里?

附言:我使用的是 Win10 专业版和 urlrewritefilter-4.0.3

最佳答案

<rule>
   <from>^/doc/(.*)$</from>
   <to type="redirect">/xyz/$1</to>
</rule>

<from><to>在你的统治下应该交换。尝试类似的东西:

<rule match-type="wildcard">
   <from>^/xyz/**</from>
   <to>/doc/$1</to>
</rule>

UrlRewriteFilter - Manual 中所述,以上将把对/xyz/** 的请求转发到/doc/**

出站规则类似<rule>但处理传递给 response.encodeURL() 的 URL .

关于java - Tomcat URL 重写过滤器工作不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33912523/

相关文章:

java - 在较高级别包的类中使用较低级别包的 API 是个好主意吗?

javascript - 使用 AJAX 时 history.pushState 的问题

java - 人类友好的唯一 URL

java - 不比较上午 10 点之前的时间

java - 是否可以使用 ant 自动创建 inno 安装包?

gwt - 在 Tomcat 上部署时出错

java - Tomcat 服务器(来自 XAMPP 包)无法从 Eclipse 启动

web-services - 如何添加单独的 Web 部署描述符?

递归子文件夹链接的 .htaccess 规则

java - EJB 抛出 LazyInitializationException