关于url重写我就不多解释了,主要说我遇到的问题吧!在此之前先介绍一下我的开发环境 vs2005,xp,iis6.0,重写的组件用的Intelligencia.UrlRewriter.dll问题
1:在vs中运行网站程序没有任何错误,通过url重写能使
   http://localhost:1086/site/aboutus/
   这样的url访问到
   http://localhost:1086/site/aboutus.aspx
   但是当我在iis中访问时只能用.aspx结尾的url访问页面
   之前写在页面中的以.html结尾的页面全部返回404错误
   但是之前这些url在vs下面都是可以访问的2:对于Intelligencia.UrlRewriter.dll的组件的正则表达式的解析不是很明白
 比如 <rewrite url="/(aboutus)/?" to="/site/$1.aspx" />
 这段应该只能解析出 "http://***/***/aboutus/" 到 aboutus.aspx页面
 但是它竟然可以把"http://***/***/aboutus/([^.]+)\.html" 也解析到
 aboutus.aspx页面 并且..并且可怕的是$1竟然可以取到 aboutus 这个正确的值
 请那位高人帮忙解释下,小弟刚使用这个组件,还不是很了解....3:怎样使用Intelligencia.UrlRewriter.dll组件设置二级域名望各位高手不要吝啬只言片语,小弟只有100多分了,都拿出来了,各位不要嫌分少

解决方案 »

  1.   

    string rootPath = Request.ApplicationPath;
    if (rootPath.Length == 1) rootPath = "";Response.Redirect(rootPath + "/default.aspx");
      

  2.   

    (IIS下,在vs里就不用)要使用html扩展名的,要么你设置html映射到.net2.0,要么用ISAPI组件支持。前一种在虚拟主机上,有可能不会帮你实现,后一种一些主机商已经支持rewrite.dll组件重写,你只要发你的规则给他们即可Intelligencia.UrlRewriter.dll这个建议你下它的类库下来,而不是非填封装,对应的还有另一个类库,好像是解决分页的或什么的,好像是叫ActionlessForm和这个搭配使用的.你下回来引用即可
    对于组件的正则,相关的看下正则表达式的帮助,你上网找下,学习下正则表达式也是不错的二级域名上网一搜很多 ...good luck!
      

  3.   

    开发环境 vs2005,xp,iis6.0
    -------
    有这个开发环境,不用任何组件一样很容易实现重写
    1.httpmodule类
    2.Global.asax中
        void Application_BeginRequest(object sender, EventArgs e)
        {
            if (Request.Url.ToString() == "1.html")
            {
                Response.Redirect("1.aspx"); 
            } 
        }
      

  4.   

    2:对于Intelligencia.UrlRewriter.dll的组件的正则表达式的解析不是很明白 
    比如 <rewrite url="/(aboutus)/?" to="/site/$1.aspx" /> 
    这段应该只能解析出 "http://***/***/aboutus/" 到 aboutus.aspx页面 
    但是它竟然可以把"http://***/***/aboutus/([^.]+)\.html" 也解析到 
    aboutus.aspx页面 并且..并且可怕的是$1竟然可以取到 aboutus 这个正确的值 
    -----------------------------------
    这说明你可能不懂正则<rewrite url="/(aboutus)/?" to="/site/$1.aspx" /> 
    说明,只要url中有"/aboutus/",就会重写,并且,$1替换为aboutus,就是小括号中的东东
    二级域名要靠泛解析,或DNS服务器
      

  5.   

    有些问题可以用一些变通的办法解决:
    你可以在IIS中为目录设定默认的访问页面,如default.aspx,这就避开了问题,
    然后就是重写URL的事了
      

  6.   

    to  楼上三位  
    正则表达式虽然不是我的强项,但是像这种还是没有问题的
    可能是我的解释不够清楚我问得第二个问题是
    我用<rewrite url="/(aboutus)/?" to="/site/$1.aspx" /> 
    解析url  这里面的"/(aboutus)/?" 难道不是说:
    只要是以"aboutus"结尾或则以"aboutus/"结尾才匹配么
    我的问题是这段正则竟然可以匹配 "/aboutus/***/ddd/(后面还可接任意数量的任意字符)"
    这样的url , 也就是说 只要url中有"/aboutus/"这么一段就会被解析到about.aspx页面另外第三个问题是
    在设置 rewrite 节点的时候,是截取不到"http://***/"这段的
    所以是不可能分析的到二级域名的,应该不关泛解析和dns什么事再次谢谢ls三位
      

  7.   

    我问得第二个问题是 
    我用 <rewrite url="/(aboutus)/?" to="/site/$1.aspx" /> 
    解析url  这里面的"/(aboutus)/?" 难道不是说: 
    只要是以"aboutus"结尾或则以"aboutus/"结尾才匹配么 
    我的问题是这段正则竟然可以匹配 "/aboutus/***/ddd/(后面还可接任意数量的任意字符)" 
    这样的url , 也就是说 只要url中有"/aboutus/"这么一段就会被解析到about.aspx页面 
    -----------------------------
    所以我才说你不懂正则
    要想只要是以"aboutus"结尾或则以"aboutus/"结尾才匹配
    "/(aboutus)/?$" 
      

  8.   

    另外第三个问题是 
    在设置 rewrite 节点的时候,是截取不到"http://***/"这段的 
    所以是不可能分析的到二级域名的,应该不关泛解析和dns什么事 
    -------------------------------------
    我想告诉你一件事,二级域名不是什么组件就可以办成的事
    一定要靠 泛解析,或DNS服务器
      

  9.   

    谢谢阿飞,真的感谢,我知道"^"和"$"和用法和含义
    这里是我大意了,呵呵,低级错误,自己先鄙视一个,阿飞教训的是另外在iis中访问网站的问题也解决了,现在只剩最后一个问题了就是二级域名的问题,我现在的网站还没有放在服务器上,但是放上去后就会
    设置二级域名,我的问题就是设置了二级域名后我要将相应的二级域名解析到
    相应的网页比如我要将http://topic.csdn.net解析到http://www.csdn.net/index.aspx网页
    那我写正则表达式则要这样
    <rewrite url="^http://(topic)\.csdn\.net" to="http://www.csdn.net/index.aspx" /> 
    现在问题出来了,我在调试中发现这里解析的url并不包含"http://topic.csdn.net"这段,如果阿飞知
    道的话请指教下,或则提供下你的思路,不胜感激...
      

  10.   

    http://topic.csdn.net
    -------------
    你不泛解或dns,这个域名根本就不会向你的服务器发出请求
      

  11.   

    据说 IIS 7.0 里面已经集成了 URL 重写的功能。建议楼主学学呀。·