使用HttpModule的Rewrite组件,例如,有如下三种情况(1) product.aspx?class=3
重写问product-3.aspx
(2) product.aspx?class=3&page=2
重写问product-3-2.aspx
(3) product.aspx?page=3
重写问product-3.aspx
问题就是,当遇到product-3.aspx这样的参数时,接收页无法判断到底应该是product.aspx?class=3还是product.aspx?page=3这个不知道大家都是如何解决的呢?
附上urls.config文件内容。    <rewrite name="test1"
        path="/product{0}.aspx"
        pattern = "/product-(\d+).aspx"
        page="~/product.aspx"
        querystring="page=$3" />    <rewrite name="test2"
        path="/product{0}.aspx"
        pattern = "/product-(\d+).aspx"
        page="~/product.aspx"
        querystring="class=$3" />    <rewrite name="test3"
        path="/product.aspx"
        pattern = "/product-(\d+)(-(\d+))?.aspx"
        page="~/product.aspx"
        querystring="class=$1^page=$3" />

解决方案 »

  1.   

    用正则前面加上page class区分
      

  2.   

    谢谢指教。可以说的详细点吗?或者简单的举个例子?对了,product-1-2.aspx 这样的文件名格式不能变动的
      

  3.   

    其中有一条rewrite 不会执行的吧
      

  4.   

    是的,只执行 querystring="class=$3" 只有product-1.asps的时候,能不能想办法让它区分出到底是要:porduct.aspx?class=1,还是:product.aspx?page=1
      

  5.   

    我又仔细想了想,看来不改动文件名形式估计是不太可能的。如果我发送一个请求 www.xxxx.com/product-1.aspx 后台接收页面无法替我决定该转到
     www.xxxx.com/product.aspx?class=1
    还是
    www.xxxx.com/product.aspx?page=1这根本就是有歧义的。或许可以用product-1.aspx 和 product_1.aspx来区分但过有更多的参数就无能为力了,真是为难。不知道有什么更好的办法,请赐教
      

  6.   


    谢谢您的提示。确实找到了解决办法。在数字前加上字母来区分,如下
      
      <rewrite name="test1"
      path="/product{0}.aspx"
      pattern = "/product-p(\d+).aspx"
      page="~/product.aspx"
      querystring="page=$3" />  <rewrite name="test2"
      path="/product{0}.aspx"
      pattern = "/product-c(\d+).aspx"
      page="~/product.aspx"
      querystring="class=$3" />就是URL看起来很奇怪,成了product-1-p1.aspx这样的。