論壇中碰到如此問題:
我們做了一個網站,網域名稱是www.3322173.com
沒想到今天忽然發現了www.qiepeng.cn的內容和我們的是一模一樣...內容也是同步更新,只是把內容中3322173.com替換成qiepeng.cn
我關閉我自己的IIS後,兩個網域名稱都不能訪問了.
我鬱悶啊,這是什麼樣的技術哦.怎麼解決呢?
這個事情肇事人很無恥,也很容易對付,只要把對方伺服器ip屏蔽掉就ok了,如何?的呢,下面就以上面的例子講述。
主要思路就是url重新導向。
開啟iis,建立一個網站,名稱為test,配置同一般的.net2.0配置。
建立成功後,有些地方需要修改。
為404錯誤重新導向,這個是最關鍵的。選擇屬性-自訂錯誤-列表中雙擊404,訊息類型選url,url的地方輸入 /Handler.ashx
讓iis不處理aspx等檔案。選擇屬性-主目錄-配置-應用程式擴充中把aspx刪除。
這樣iis就配置完成了,接著寫一小段代碼來處理404錯誤重新導向的頁面就可以了。
這裡用httphandler來處理,也就是上面的Handler.ashx檔案,這樣不容易和其他檔案衝突,用dll和webconfig配合其實更好。
開啟vss2005,建立新網站,就是剛剛的iis路徑。刪掉那個default.aspx。
添加新項-一般處理常式-產生一個Handler.ashx。
添加如下代碼:
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
public class Handler : IHttpHandler ...{
public void ProcessRequest (HttpContext context) ...{
//標記一下
context.Response.ContentType = "text/plain";
//取得404錯誤重新導向的參數和主機
string strQuery = context.Request.Url.Query.Replace("?404;","").ToLower();
string localHost = context.Request.Url.Authority.ToLower();
//計算目標地址
string targetHost = "www.3322173.com";
string queryUrl = strQuery.Replace(localHost, targetHost);
try
...{
//擷取目標頁面內容
System.Net.WebClient wb = new System.Net.WebClient();
byte[] b = wb.DownloadData(queryUrl);
string type = wb.ResponseHeaders["Content-Type"];
//判斷是否文檔頁面,這裡可以稍微複雜些考慮到js和css等其他檔案,多判斷幾個條件就可以了
if (!string.IsNullOrEmpty(type) && type.ToLower().StartsWith("text/html"))
...{
//替換文檔內容中的主機地址
string str = System.Text.Encoding.Default.GetString(b);
str = str.Replace(targetHost, localHost);
context.Response.Write(str);
}
else
...{
//如果是圖片等直接輸出
context.Response.BinaryWrite(b);
}
context.Response.End();
}
catch
...{ }
}
public bool IsReusable ...{
get ...{
return false;
}
}
}
效果如下
直接運行就可以看到效果了。
申明:本文只針對技術方面討論,請不要用於不正當途徑,否則後果自負,本文作者jinjazz不承擔任何責任。