ASP.NET url重写与图片防盗链
现在的网站优化方式有很多、其中一种就是url重写、很多人都认为url重写很难很复杂,其实很简单的。我们可以在全局处理程序中的Application_BeginRequest()事件中来写。
下面的就是一个典型、简单的url重写的例子。
1 protected void Application_BeginRequest(object sender, EventArgs e) 2 { 3 //判断请求的路径 photos-id.html 4 string strReg = @"photos\-(\d{1,4})\.aspx"; 5 //请求的路径 6 string OverrideUrl = Request.AppRelativeCurrentExecutionFilePath; 7 Match match = Regex.Match(OverrideUrl, strReg, RegexOptions.IgnoreCase); 8 if (match.Success) 9 { 10 //取到id 11 string id = match.Groups[1].Value; 12 Context.RewritePath("~/PhotosInfo.aspx?id=" + id); 13 } 14 15 if (OverrideUrl.ToLower().Contains("index.aspx")) 16 { 17 Context.RewritePath("~/Index.aspx"); 18 } 19 }
不知道听过图片防盗链没有?上次有个做网站很多年的大神居然没有听过、我只是一个新手。就是一个网站上面的图片是自己没有的。是通过抓去别人的服务器上面的图片放到自己的网站上面来。这时候不想让别这样的利用我们的资源,就可以进行防盗链。这里主要是通过Referrer来判断的。判断上一次请求的路径和这次请求的路径是否是一致的、如果是一致的那就是直接访问的这张照片,如果不一致、那么就是通过别人的服务器转到自己的服务器上面来的。这里同样是在Application_BeginRequest()中写的。
1 //获得路径 2 string rawUrl = Request.RawUrl.ToLower(); 3 if (rawUrl.Contains("/UpLoadImage/"))//判断是否是直接访问这个文件夹 4 { 5 Uri url = Request.Url; 6 Uri reffer = Request.UrlReferrer; 7 if (!Commpar(url, reffer)) 8 { 9 //不等、是盗链 11 string path = Request.MapPath("~/daolian.jpg"); 12 Response.WriteFile(path); 13 Response.End(); 14 } 15 }
1 //判断域名是否是一样 2 bool Commpar(Uri url1, Uri url2) 3 { 4 return Uri.Compare(url1, url2, UriComponents.HostAndPort, UriFormat.SafeUnescaped, StringComparison.CurrentCultureIgnoreCase) == 0; 5 }