Spiga

ASP.NET中实现二级或多级域名(修改UrlRewrite)需要注意的问题

2006-02-20 13:29 by 江大鱼, 15846 visits, 收藏, 编辑

本文背景:

http://jzywh.cnblogs.com/archive/2005/09/29/246650.html


网上很多朋友看到我这篇文章,按照我的方法做了,但是还是没有得到想要的效果,其实有些问题需要注意一下,我上篇文章也只是提出了解决这一问题的办法的最核心的内容,有些朋友可能在实际运用中可能会碰到一些问题其实可以根据自己的经验作出相应处理应该可以解决,我在这里帮大家列出几点以帮助大家快速解决问题。


1.域名解析问题
      输入了域名http://1234.abc.com/,浏览器提示找不到网页。首先,你应该确认你的域名是否支持泛域名解析,就是让所有的二级,三级域名都指向你的server。其次,要保证你的站点是服务器上的默认站点,就是80端口主机头为空的站点即可以直接用IP可以访问的http://1234.abc.com/,要么要提示你的站点的错误信息,要么会正确的执行你定义的URLRewrite,要么显示你的站点的首页。

2.不能执行重写的问题
      如果你确认你的域名解析是正确的,但是还是不能重写,访问http://1234.abc.com/会提示路径"/"找不到...,
如果是这样的话,你先添加  ASPNET_ISAPI的通配符应用程序映射(这一步是必需的,Sorry!没有在上篇文章中提出来)。

操作方法:IIS站点属性 ->主目录 ->  配置




点击插入按键




选择或输入C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll
取消"确认文件是否存在"前的钩. 
确定

在来访问http://1234.abc.com/  应该是没有问题了。


3. 默认首页失效,因为把请球直接交给asp.net处理,IIS定义的默认首页将会失效,出现这种情形:
访问http://www.abc.com/ 不能访问首页,而通过http://1234.abc.com/default.aspx可以访问。
为解决这个问题,请自己在Web.Config中设置 lookfor /  to /default.aspx 或 index.aspx ..的重写,完全可以解决问题。


OK,我列出了应该会普遍出现的问题的解决方法,如果你出现了我这里没有列出的问题而你自己又不能解决的,请在此回复提问或者给我发邮件或者加我QQ.

                                                                                                  谢谢!

作者:江大鱼
出处:http://jzywh.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
作者:江振宇
出处:http://jzywh.cnblogs.com
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
Add your comment

51 条回复

  1. #1楼 杨欢[未注册用户]2006-03-03 05:17
    马的,这么好的blog竟然不告诉我。
    很专业,看不懂。
     回复 引用   
  2. #2楼 walktree(三木)[未注册用户]2006-03-13 13:35
    是jacky?

    觉得还是apache的rewrite好用一点...有空去看看我的blog
     回复 引用   
  3. #3楼[楼主] 江大鱼      2006-03-14 11:49
    s@walktree(三木)
    是Jacky,忘记这个名字吧,我现在的英文名是Kerry Jiang,haha..
    你的blog我会经常去看的,已经加了友情链接。
    其实.NET进行URL重写也是很简单的,也是只需写正则表达式就够了,我这里提到的是将域名重写,http://123.abc.comhttp://www.abc.com/....
     回复 引用 查看   
  4. #4楼 petr[未注册用户]2006-04-18 14:02
    真是一个好东西,江大鱼谢谢你.
     回复 引用   
  5. #5楼 Jason Cui[未注册用户]2006-07-06 18:17
    使用了三级域名后出现登录Cookie丢失的问题。用户如果一段时间不操作,就会出现无法登录,必须关掉浏览器重新开才行。或者如果我更新了dll文件,也会导致这个问题。如果用户选择了记住密码,则必须清除Cookie才能重新登录。请问这是谁的问题啊?
     回复 引用   
  6. #6楼[楼主] 江大鱼      2006-07-11 13:32
    对于这个问题,建议用 cookesless 的Session! 在 Web.config里面配置一下就可以了!
     回复 引用 查看   
  7. #7楼 kide111[未注册用户]2006-08-10 11:52
    用二级域名可以用..但是普通的跳转出现问题如:
    http://www.abc.com/2004/04/01.aspx
    跳转不过去.. (请问这个应该如何修改?)
    而这个是正常的...
    http://www.abc.com/2004/04/default.aspx
    正常!

    <RewriterRule>
    <LookFor>http://(www\.)abc\.com/(\d{4})/(\d{2})/(\d{2})\.aspx</LookFor>
    <SendTo>~/ShowBlogContent.aspx?year=$2&amp;month=$3&amp;day=$4</SendTo>
    </RewriterRule>
    <RewriterRule>
    <LookFor>http://(www\.)abc\.com/(\d{4})/(\d{2})/default\.aspx</LookFor>
    <SendTo>~/ShowBlogContent.aspx?year=$2&amp;month=$3</SendTo>
    </RewriterRule>
     回复 引用   
  8. #8楼 ourgsalei[未注册用户]2006-08-12 01:30
    @kide111

    现在二级域名可以使用了,跳转是跳转了,但我设置了始终跳转到站点首页,这又是什么原因呢?

    <RewriterRule>
    <LookFor>http://pd\.abc\.com\.cn</LookFor>
    <SendTo>/pd/Help.aspx</SendTo>
    </RewriterRule>
     回复 引用   
  9. #9楼 maitor[未注册用户]2006-08-12 14:51
    我也出现楼上的问题了,环境 win2KServer+SP4 IIS5.0 framework1.1

    <RewriterConfig>
    <Rules>
    <RewriterRule>
    <LookFor>http://(\d+)\.abc\.com</LookFor>
    <SendTo>http://www.abc.com/Comp/$1/</SendTo>
    </RewriterRule>
    </Rules>
    </RewriterConfig>
     回复 引用   
  10. #10楼 cjwjacky[未注册用户]2006-08-21 04:48
    对不起,可不可以上传所编译的dll文件啦
     回复 引用   
  11. #11楼 winshion[未注册用户]2006-08-30 11:17
    是啊!最好上传编译好的DLL文件!
     回复 引用   
  12. #12楼 12[未注册用户]2006-09-27 16:21
    最好上传编译好的DLL文件

    否则就是骗人的
     回复 引用   
  13. #13楼 永远的不倒翁      2006-10-31 14:36
    老兄,我照着你的改了,
    为什么不行呢,如果只对域名之后的部分进行重写,可以
    对域名进行重写就没问题,
    是否还需要改某些东西???
     回复 引用 查看   
  14. #14楼 我比较笨[未注册用户]2006-12-03 20:55
    请自己在Web.Config中设置 lookfor / to /default.aspx 或 index.aspx ..的重写,完全可以解决问题。

    请您写完整,可以吗?
     回复 引用   
  15. #15楼 army[未注册用户]2006-12-25 17:11
    在win2000里如何设置“通配符应用程序映射”?
     回复 引用   
  16. #16楼 AA[匿名][未注册用户]2006-12-28 16:28
    VB.NET 里面 重写 为什么都在根目录?
    ASP.NET 里面是正确的
    难道需要把 重写类 改成VB 本人理解都是通用的
     回复 引用   
  17. #17楼 麦芽购物搜索[未注册用户]2007-03-20 12:02
    我碰到了URL重写的一些问题,从Google搜索到了您这儿。不知道您是否还能看到,姑且试试。

    我的开发环境是ASP.NET,使用的编程语言是C#。
    我的URL重写是用了HttpModule,第一步已经将问号去掉了,现在就是后缀名的问题了。
    我现在希望能将aspx后缀改成html,比如将http://www.abc.com/aaa_bbb.aspx改成http://www.abc.com/aaa_bbb.html

    这个应该怎么做呢?

    我已经做的是在IIS中添加了一个新的应用程序映射,扩展名是.html,可执行文件路径同.aspx是一样的。

    谢谢~
    希望能得到您的答复~
     回复 引用   
  18. #18楼 生的伟大活得憋屈      2007-03-22 20:15
    你先添加 ASPNET_ISAPI的通配符应用程序映射(这一步是必需的,Sorry!没有在上篇文章中提出来)。

    这个做法绝对影响性能!!!!!!!
     回复 引用 查看   
  19. #19楼 依天[未注册用户]2007-03-27 22:45
    我弄成功了~ 还有不会的可以Q我, 445333755
     回复 引用   
  20. #20楼 枫叶[未注册用户]2007-04-05 13:33
    @依天
    能不能加我的QQ我的QQ是348349361, 我现在正在做关于实现二级域名的问题, 希望你能帮一下忙, 小弟感激万分
     回复 引用   
  21. #21楼 s3[未注册用户]2007-04-26 11:25
    @依天
    倒,Q不让加,给你直接发消息了。
    46803380
     回复 引用   
  22. #22楼 s3[未注册用户]2007-04-26 11:33
    http://wpa.qq.com/msgrd?V=1&Uin=445333755&Site=abc&Menu=yes
     回复 引用   
  23. #23楼 sisuo[未注册用户]2007-04-28 17:08
    域名后面的是可以重写了,可是二级域名全重写到了同一个页,我要想达到的目的是在IE地址栏内输入不同的二级域名要打开相应的网页页面,比如输入:http://1234.abc.cn 要打开的是user/1234.aspx的页面,输入:http://efg.abc.cn 要打开的是user/efg.aspx的页面.这样就实现不了了,小弟在此请教了!
     回复 引用   
  24. #24楼[楼主] 江大鱼      2007-05-29 17:05
    @Jason Cui
    设置cookie的domain为 .youdomain.com
     回复 引用 查看   
  25. #25楼[楼主] 江大鱼      2007-05-29 17:07
    @12
    我只提供解决问题的基本方法和思路,根据个人实际情况不同实现过程中肯定会遇到这样或那样的问题,请根据自己的经验来解决。
     回复 引用 查看   
  26. #26楼[楼主] 江大鱼      2007-05-29 17:12
    @生的伟大活得憋屈
    肯定会影响性能,如果在性能要求不高的情况下课直接使用此方法。否则请自行扩展此方法。
     回复 引用 查看   
  27. #27楼 HuaHua[未注册用户]2007-07-12 15:05
    请问如何解决 图片,样式路径不一致的问题?重写么?
     回复 引用   
  28. #28楼 鲁德明[未注册用户]2007-08-04 20:25
    我试了一下, 发现出现(您没有许可访问这个页面)的页面, 我用的是Windows 2003 small busniess的操作系统。

    寻求帮助!!
    david@e-firmen.com
     回复 引用   
  29. #29楼 何厚铧[未注册用户]2007-08-04 21:04
    这可帮了我大忙了,谢谢了。


    非常好用的.net验证码类库
    WFsoft.wfLibrary.wfVerifyImage v1.6
    http://www.wfsoft.com/wf_wfVerifyImage.asp
     回复 引用   
  30. #30楼 胡煜[未注册用户]2007-08-13 17:38
    我不想把二级域名写死在web.config中,而且我要重写的目标url也不能写死
    比如:
    http://localhost/mdcn.cn/page?name=wutai 这是完整地址
    重写:wutai.mdcn.cn/wutai.aspx(html)
    如果name=""改变了的话,前面的重写的"".mdcn.cn/"".aspx也要改变.
    也就是说这个name的名字在里面不能固定,我在看你在.dll文件改的代码,也就把它写死了呀.if (re.IsMatch(requestedPath))
    {
    //找到url里的二级域名
    string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
    string domain2=UserHost [0];

    //根据需要设定要重写的目标url
    string sendToUrl ;
    if(domain2==” Love”)
    sendToUrl =” /action.aspx?id=1”;
    else if(domain2==” call”)
    sendToUrl =” /action.aspx?id=2”;
    else i f(domain2==” walkwith”)
    sendToUrl =” /walk.aspx”;
    RewriterUtils.RewriteUrl(app.Context,sendToUrl);
    }
    因为以上name是从数据库读取出来的,对应的信息是单独网面的名字,如果要增加页面的话,那还要在.dll文件里改呀,这太麻烦了.可不可教我一下怎么实现这个功能.
     回复 引用   
  31. #31楼 zhudaniel[未注册用户]2007-09-13 22:47
    test
     回复 引用   
  32. #32楼 .NET的春天      2007-12-29 00:25
    好不容易找到URL重写的最佳解方案,收藏!
     回复 引用 查看   
  33. #33楼 tide[未注册用户]2008-01-29 15:24
    你好,我URL重写以后,在本地正确,为啥上传到服务器就不对了呢?
    错误是无法找到该页
     回复 引用   
  34. #34楼 蓝天旭日      2008-02-23 10:26
    url重写是个很好的办法,不过响应问题到是值得让我们深思是不是要慎用!!
     回复 引用 查看   
  35. #35楼 240173229[未注册用户]2008-09-17 10:41
    --引用--------------------------------------------------
    tide: 你好,我URL重写以后,在本地正确,为啥上传到服务器就不对了呢?
    <br> 错误是无法找到该页
    <br>
    --------------------------------------------------------
     回复 引用   
  36. #36楼 ChangEliu[未注册用户]2009-02-17 16:45
    您好
    我有个问题 这种解决方案 是不是[只有网站为主机默认网站]才有用?
    如果是买的虚拟机空间 可以实现Url重写吗?
    这几天碰到这个问题了 在我的本地IIs里 用起来没问题 可是发到服务器就有问题了
    报这种错误:
    分析器错误信息: 创建 RewriterConfig 的配置节处理程序时出错: 无法生成临时类(result=1)。
    error CS2001: 未能找到源文件“C:\WINDOWS\TEMP\oplzath7.0.cs”
    error CS2008: 未指定输入

    我找了一下答案说:
    对C:\WINDOWS\TEMP\这个目录增加 Network Service和 asp.net帐户的写权限。
    可我叫服务器提供商设置过了 还是有一样的问题.


    期待能获的回复 谢谢
     回复 引用   
  37. #37楼[楼主] 江大鱼      2009-02-18 18:22
    @ChangEliu
    买的虚拟机空间可以实现URL重写,但是不能实现域名重写。


    对于你的C:\WINDOWS\TEMP地问题,你还是需要要求供应商给与足够的权限。
     回复 引用 查看   
  38. #38楼 钟清2009-05-26 16:50
    你好,
    有个问题想跟您一起探讨下,
    你说的这个二级域名,我在一台服务器的话,只能设置一个站点的默认主机头为空。那我如果这台服务器有两个站点,要用到二级域名,怎么办.QQ,33738993
     回复 引用   
  39. #39楼[楼主] 江大鱼      2009-05-29 19:02
    @钟清
    两个IP
     回复 引用 查看   
  40. #40楼[楼主] 江大鱼      2009-05-29 19:03
    @ChangEliu
    Url重写不需要,支持多极用户域名就需要了
     回复 引用 查看   
  41. #41楼[楼主] 江大鱼      2009-05-29 19:05
    @胡煜
    UrlRewrite过程中加入你自己的逻辑就够了
     回复 引用 查看   
  42. #42楼 Joking[未注册用户]2009-06-27 23:41
    楼主好技术!
    楼主用的是iis6,03的吧
    我个人以为,配置,不管怎么样,应该只要通过文件设置就可以了,如果还要用到界面的话。。。。那就还不算最佳方案。。
    我也遇到了个问题不知如何解决的,
    <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
    这句在web.config里有了,但却还要在
    站点,属性 里加一个.html的扩展名用C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
    处理。解析才正常。。而web.config中的那句好像没用掉了,记得web.config的执行顺序是有说是,站点web.config->系统默认的web.config的。所以很想不通。
    楼主能否帮忙解答一下哈?
     回复 引用   
  43. #43楼[楼主] 江大鱼      2009-06-29 17:59
    --引用--------------------------------------------------
    Joking: 楼主好技术!
    楼主用的是iis6,03的吧
    我个人以为,配置,不管怎么样,应该只要通过文件设置就可以了,如果还要用到界面的话。。。。那就还不算最佳方案。。
    我也遇到了个问题不知如何解决的,
    &lt;add verb=&quot;*&quot; path=&quot;*.html&quot; type=&quot;URLRewriter.RewriterFactoryHandler, URLRewriter&quot; /&gt;
    这句在web.config里有了,但却还要在
    站点,属性 里加一个.html的扩展名用C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
    处理。解析才正常。。而web.config中的那句好像没用掉了,记得web.config的执行顺序是有说是,站点web.config-&gt;系统默认的web.config的。所以很想不通。
    楼主能否帮忙解答一下哈?
    --------------------------------------------------------
    IIS6中Module和Handler默认是不处理静态文件的。 IIS7的集成运行模式中可以直接通过配置文件实现。
     回复 引用 查看   
  44. #44楼 trust[未注册用户]2009-07-14 15:55
    我设置2级域名,为什么用2级域名访问的时候都指向首页,不是我想要的效果
     回复 引用   
  45. #45楼 涛_涛      2009-07-27 23:22
    很不错的文章,要是有一个现成的DEMO更好了。学习中……
     回复 引用 查看   
  46. #46楼 Prewin      2009-08-28 17:13
    哎跟44楼的问题一样
    就是找不到原因!
     回复 引用 查看   
  47. #47楼 ker[未注册用户]2009-11-06 17:03
    照着做了不行,不能调转
     回复 引用   
  48. #48楼 剑飘红      2010-01-19 16:39
    这个做法是针对一个站点上只有个80端口的吧


    假若有两个站点
    www.abc.com
    www.def.com

    我都想实现二级域名,如下
    a.abc.com
    b.abc.com

    d.def.com
    e.def.com

    我应该怎么办呢
     回复 引用 查看   
  49. #49楼[楼主] 江大鱼      2010-01-22 11:01
    two IP
     回复 引用 查看   
  50. #50楼 企业在线      2011-08-19 09:28
    二级域名实现不了
    <RewriterRule>
    <LookFor>http://(\d*)\.51e-online\.com/</LookFor>
    <SendTo>~/2.aspx?id=$1</SendTo>
    </RewriterRule>

    <div>
    <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/2.aspx?id=2">正常URL</asp:HyperLink>
    <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="http://2.51e-online.com/">重写URL</asp:HyperLink>
    </div>

    测试页面 http://www.51e-online.com/1.aspx
     回复 引用 查看   
  51. #51楼 我是小菜鸟      2011-12-29 13:37
    值不能为空。
    参数名: replacement
    这是什么情况啊
     回复 引用 查看