今天用urlrewrite对URL做重写,用的jar包版本是3.2.0,按照要求配置了urlrewrite.xml,总是没起作用呀!不知道怎么回事,帮忙看下。
urlrewerite.xml代码如下:<rule>
   <note></note>
   <from>/page/news/news_details_([0-9]+)</from>
   <to>/news.do?method=newsinfo&amp;nid=$1</to>
</rule>
    
 <outbound-rule>
      <from>/news.do?method=newsinfo&amp;nid=([0-9]+)$</from>
      <to>/page/news/news_details_$1</to>
 </outbound-rule>
页面代码:<c:url var="news_url" value="/news.do?method=newsinfo&nid=${n.newId }" />
    <a href="${news_url }" title="点击查看新闻 ${n.newTitle }">${n.newTitle }</a>

解决方案 »

  1.   

    struts2的过滤器配置有加入以下两项了吗,不加然会导致404错误
    <dispatcher>REQUEST</dispatcher>   
    <dispatcher>FORWARD</dispatcher>
      

  2.   

    加了,是一样的结果!关键是我URL地址根本没有被重写,还是原先的!
    这两行代码是什么意思呢?
      

  3.   

    不介意的话把你的web.xml代码贴出来看下.......问题应该出现在你web.xml吧
      

  4.   

    以下是web.xml<?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <servlet>
      
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>3</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>3</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
     
      <filter>  
            <filter-name>urlRewriteFilter</filter-name>  
            <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
       </filter>  
       <filter-mapping>  
          <filter-name>urlRewriteFilter</filter-name>  
          <url-pattern>/*</url-pattern>
          <dispatcher>REQUEST</dispatcher>   
          <dispatcher>FORWARD</dispatcher>
       </filter-mapping>  
       
       <filter>
       <filter-name>loginFilter</filter-name>
       <filter-class>com.joye.filter.LoginFilter</filter-class>
      </filter>
      
       <filter-mapping>
       <filter-name>loginFilter</filter-name>
       <url-pattern>/admin/*</url-pattern>
      </filter-mapping> 
      
      <filter>  
           <filter-name>encodingFilter</filter-name>  
           <filter-class>com.joye.filter.CharacterSetEncodingFilter</filter-class>  
      </filter> 
      
      <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>*.do</url-pattern>
     </filter-mapping>


      <welcome-file-list>
       <welcome-file>index.jsp</welcome-file>
        <welcome-file>page/index.jsp</welcome-file>
        <welcome-file>admin/login.jsp</welcome-file>
      </welcome-file-list><error-page>
    <error-code>404</error-code>
    <location>/notFontPage.jsp</location>
    </error-page>
    <!--  <error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
    </error-page>-->
      
    </web-app>
      

  5.   


    <filter>  
            <filter-name>urlRewriteFilter</filter-name>  
            <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
       </filter>  
       <filter-mapping>  
          <filter-name>urlRewriteFilter</filter-name>  
          <url-pattern>/*</url-pattern>
          <dispatcher>REQUEST</dispatcher>   
          <dispatcher>FORWARD</dispatcher>
       </filter-mapping> 

    这一段为web.xml中配置的URLRewrite
      

  6.   

    你web.xml可以说是没问题的,但严格来说还是存在问题的。例如:过滤器的排版顺序,这一点值得注意。
    再此你url没办法重写原因在于你<outbound-rule>
          <from>/news.do?method=newsinfo&amp;nid=([0-9]+)$</from>
          <to>/page/news/news_details_$1</to>
     </outbound-rule问题就出在/news.do?这里,“?”得给它转义,也就是/new.do\?method=.....
      

  7.   

    那页面上这样写对吗?
    <c:url var="news_url" value="/news.do?method=newsinfo&nid=${n.newId }" />
    <a href="${news_url }" title="点击查看新闻 ${n.newTitle }">${n.newTitle}</a>这样,是鼠标放上面连接就了还是点了之后呢?
      

  8.   

    <to>/page/news/news_details_$1</to>这里要怎么写?我这是news_details_$1随便写的,IE显示404
      

  9.   

    我用的是Struts2,
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher>
    这两行是放在Struts的过滤器里面,如果放在urlrewrite的过滤器会报404错误<filter>
       <filter-name>struts2</filter-name>
       <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> 
       </filter>
       <!-- encoding filter-mapping-->
    <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- struts2 filter-mapping-->
    <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>    
            <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.do</url-pattern>
    </filter-mapping>我没有用JSTL技术,在JSP是用response.encodeURL()
    <a href="<%=response.encodeURL("news.do?id=1111") %>">view</a>
    鼠标放上去已经是显示重写后的链接了
      

  10.   

    鼠标放上去就能看到你伪装的链接了。你页前台的代码不用改,改的是你的配置文件里头的
    <rule>
       <note></note>
       <from>/page/news/news_details_([0-9]+)</from>
       <to>/news.do?method=newsinfo&amp;nid=$1</to>
    </rule>
        
     <outbound-rule>
          <from>/news.do\?method=newsinfo&amp;nid=([0-9]+)$</from>
          <to>/page/news/news_details_$1</to>
     </outbound-rule>看看红色的地方与你之前的地方那个不同。你改一下,再试试
      

  11.   

    红色显示不出来呀。呵呵!
    也就是"?" 问号前面加了个”\“符号而已。转义<rule>
       <note></note>
       <from>/page/news/news_details_([0-9]+)</from>
       <to>/news.do?method=newsinfo&amp;nid=$1</to>
    </rule>
        
     <outbound-rule>
          <from>/news.do\?method=newsinfo&amp;nid=([0-9]+)$</from>
          <to>/page/news/news_details_$1</to>
     </outbound-rule>