zoukankan      html  css  js  c++  java
  • 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,就这么多了! 小伙伴们快去试试吧~

  • 相关阅读:
    Redis使用小结
    MongoDB中的变更通知
    发布一个从迅雷下载字幕的小工具
    在Windows下通过netsh命令实现端口映射
    .net core在Linux ARM板上运行
    通过WinAPI播放PCM声音
    spring中scope作用域(转)
    Spring <context:annotation-config/> 解说(转)
    Jenkins+Maven+SVN快速搭建持续集成环境(转)
    maven中跳过单元测试(转)
  • 原文地址:https://www.cnblogs.com/shuai7boy/p/6235336.html
Copyright © 2011-2022 走看看