投稿 评论 顶部

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,就这么多了! 小伙伴们快去试试吧~