C# url重写及二级域名

资料参考:http://msdn.microsoft.com/zh-cn/library/ms972974.aspx

示例:URLRewriter示例.rar

 

=======================================Url重写==========================================

1.首先下载URLRewriter.rar ,下载之后直接复制到你的网站的bin目录
2.配置 你的web.config文件
在<configuration>节点下加

 

   < configSections >
    
< section name = " RewriterConfig " type = " URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter " />
  
</ configSections >

  
<!-- 转发规则 -->
  
< RewriterConfig >
    
< Rules >
      
< RewriterRule >
        
< LookFor >~/ Url.html </ LookFor >
        
< SendTo >~/ Url.aspx ? id = aa </ SendTo >
      
</ RewriterRule >
    
</ Rules >
  
</ RewriterConfig >

 

注意在web.config中把&换为&amp;否则不能执行

同时还要在<system.web>配置节下加

 

 

< httpHandlers >
      
< add verb = " * " path = " *.aspx " type = " URLRewriter.RewriterFactoryHandler, URLRewriter " />
      
< add verb = " * " path = " * " type = " URLRewriter.RewriterFactoryHandler, URLRewriter " />
    
</ httpHandlers >

 

最后配置IIS映射,右击站点-属性-主目录-配置-插入,把复制的文件即C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_isapi.dll,

复制到可执行文件框内,同时去掉确认文件是否存在,确定即可

 

3.*映射要注意的问题
因为*映射是把所有的文件都要交给url称谢程序去处理,这样就会造成会把站点下的图片以及css或者一些下载的rar等文件都要去处理,造成性能不佳

解决办法:

方法1,把存放图片所在的文件夹转化成一个虚拟目录,在然后移处该虚拟目录*.*的映射,这样一来他的url重写程序就不会去处理图片文件,当然存放别的不需要url重写程序的文件也要象图片文件夹做类似的处理。
虚拟目录设置办法:在iis站点--右击该目录--属性--目录--创建--配置,在弹出窗口内删除:通配符应用程序映射(执行顺序)下添加的*.*的映射即可。
方法2,把不需要*.*映射的文件夹设置新站点和原来的站点分开,这样在原来的站点访问的时候用
新站点的域名即可。比如把图片设置站点http://images.abc.com/ 这样在http://abc.com/ 站点访问图片的时候就必须使用http://images.abc.com/ 图片名称.gif,这样就避免了所有问件处理。
以上两种方法即可提高不少速度,当然第一种更方便。

4.最后处理回发 ,即是指当我们在一个经过url重写的页面的提交返回后,一般情况下又返回了真实的路径,而不是咱们处理过的url地址,这种情况就需要咱们在需要处理回发(即提交表单的页面)的页面加上以下代码即可:

<script type="text/javascript">try{document.forms[0].action=""}catch(ex){}</script>

放在<form></form>里面

比如http://www.abc.com/photo/50/show_1.html 这个页面是经过url重写之后的,用户留言之后(提交表单)如果不做处理就变成了原始的路径了,如:http://www.abc.com/ photo/Detail.aspx?ptid=50&page=1 所以我们要处理回发的情况。

 

=======================================二级域名======================================

微软的URLRewrite能够对URL进行重写,但是也只能对域名之后的部分进行重写,而不能对域名进行重写,

如:可将 http:// http://www.abc.com/ /1234/ 重写为 http://www.abc.com/show.aspx?id=1234

但不能将 http://1234.abc.com/ 重写为 http://www.abc.com/show.aspx?id=1234

要实现这个功能,前提条件:

1. http://www.abc.com/ 是泛解析的,将*.abc.com做为A记录绑定IP(这是域名空间管理操作)

2. 当前网站为默认网站(即只需要输入IP即可访问),网站的第一个主机头值必须为空,否则会出现错误的请求。

3. 增加*映射(参照上面)
以上条件都满足,则在web.config中增加

 

 

< httpModules >
 
< add type = " URLRewriter.ModuleRewriter, URLRewriter " name = " ModuleRewriter " />
 
</ httpModules >


配置转发规则

 

   <!-- 转发规则 -->
  
< RewriterConfig >
    
< Rules >
      
< RewriterRule >
        
< LookFor > http: // (/w+).abc.com/</LookFor>
         < SendTo >~/ Url.aspx ? id = $ 1 </ SendTo >
      
</ RewriterRule >
    
</ Rules >
  
</ RewriterConfig >

 

IE地址栏输入 http://1234.abc.com/ ,则实际访问的是 http://www.abc.com/URL.aspx?id=1234
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 ASP.NET MVC 应用程序中实现二级域名的功能,需要进行以下步骤: 1. 将所有请求重定向到统一的控制器和操作方法。可以使用 ASP.NET MVC 中的 Route 属性或全局过滤器来实现。 2. 在重定向到控制器和操作方法后,可以解析请求的 URL 来提取二级域名。可以使用 Request.Url.Host 属性获取主机名,然后解析出二级域名。 3. 根据二级域名调用相应的业务逻辑或加载相应的视图。 以下是一个示例代码,实现了在 ASP.NET MVC 应用程序中使用二级域名: ```csharp public class SubdomainFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext filterContext) { string[] hostParts = filterContext.HttpContext.Request.Url.Host.Split('.'); if (hostParts.Length > 2) { string subdomain = hostParts[0]; // 根据二级域名调用相应的业务逻辑或加载相应的视图 // ... filterContext.Result = new RedirectResult("/Home/Index"); } } public void OnActionExecuted(ActionExecutedContext filterContext) { // do nothing } } public class HomeController : Controller { [Route("Index")] [SubdomainFilter] public ActionResult Index() { return View(); } } ``` 在上面的示例中,我们创建了一个名为 `SubdomainFilter` 的全局过滤器,该过滤器用于解析请求的 URL 并提取二级域名。如果存在二级域名,则根据二级域名调用相应的业务逻辑或加载相应的视图。在 `HomeController` 中的 `Index` 方法上,使用了 `Route` 属性来指定路由规则,并且将 `SubdomainFilter` 过滤器应用到该方法中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值