Url重写——伪静态实现

简述:

在我们浏览网站的时候,很多都是以.html结尾的。难道这些都是静态网页么?其实不是的,它们很多是伪静态

那么什么是伪静态?顾名思义,就是假的静态页面。通过某种设置让你看成是静态的。

Q:为何要使用伪静态? A:因为可以提高网站安全性,让别人不能一眼看出你的网站是什么语言开发的。

PS目前本人只学了.net,那么就以(webform)和 (MVC)网站为例进行详解。

开始正文:

1.在webform中实现伪静态

首先建立一个webform网站,然后我参考博客:http://www.cnblogs.com/net-xiejun/p/4456044.html 中的第二种方法实现了下

添加一个ReWriteUrl.cs文件,代码如下:

public class ReWriteUrl : IRouteHandler
    {
        public string UrlRote
        {
            get;
            private set;
        }
        public ReWriteUrl (string sUrlRote)
        {
            UrlRote = sUrlRote;
        }
        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            return BuildManager.CreateInstanceFromVirtualPath(UrlRote, typeof(IHttpHandler)) as IHttpHandler;
        }
    }
View Code

在Global.asax.cs文件下的Application_Start函数里

 protected void Application_Start(object sender, EventArgs e)
        {
            RouteTable.Routes.Add( new Route("xxxx.html", new ReWriteUrl("~/xxxx.ashx")));//地址重写
        }

这里我将Default.aspx重写了下,如下

  RouteTable.Routes.Add(new Route("111.html", new ReWriteUrl("/Default.aspx")));//地址重写

现在用Default.aspx和111.html都能实现访问了,不信?看下图

2.在MVC中实现伪静态

MVC就更简单了,只要修改下路由配置就可以了!~

 

访问如下:

 

MVC完整重写配置代码如下:

routes.MapRoute(  
       "Action1Html", // action伪静态    
       "{controller}/{action}.html",// 带有参数的 URL    
       new { controller = "Home", action = "Index", id = UrlParameter.Optional }// 参数默认值    
   );  
    routes.MapRoute(  
       "IDHtml", // id伪静态    
       "{controller}/{action}/{id}.html",// 带有参数的 URL    
       new { controller = "Home", action = "Index", id = UrlParameter.Optional }// 参数默认值    
   );  
  
    routes.MapRoute(  
        "ActionHtml", // action伪静态    
        "{controller}/{action}.html/{id}",// 带有参数的 URL    
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }// 参数默认值    
    );  
  
    routes.MapRoute(  
        "ControllerHtml", // controller伪静态    
        "{controller}.html/{action}/{id}",// 带有参数的 URL    
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }// 参数默认值    
    );  
    routes.MapRoute(  
       "Root",  
       "",  
       new { controller = "Home", action = "Index", id = UrlParameter.Optional });//根目录匹配    
  
    routes.MapRoute(  
       name: "Default",  
       url: "{controller}/{action}/{id}",  
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }//默认配置  
   );  

 

上面的配置完了 注意还得在webconfig <system.webServer>中添加:

<modules runAllManagedModulesForAllRequests="true" />

<add name="HtmlFileHandler" path="*.html" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>

 

OK,就这么多了! 小伙伴们快去试试吧~

posted @ 2016-12-29 23:40  shuai7boy  阅读(278)  评论(0编辑  收藏  举报