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         }

 

 

 

posted @ 2013-05-18 21:07  I-Can  阅读(521)  评论(0编辑  收藏  举报