.NET 可以攔截和更改 css 文件嗎?
更新 1:
我現在已經設置了 IIS6,因此 .NET 可以處理對 .css 文件的呼叫。我現在需要做什麼才能讓它根據引用 url 更改 css 文件?因此,如果引用 url 是http://intranet/,它應該繼續呼叫舊樣式表。如果引用 url 是http://intranetv2/,它應該呼叫新的樣式表。
原始問題:
的背景:
我有 2 個搜尋引擎。一個是舊的,另一個是全新的(發展階段)。搜尋引擎 1 在 domain1.com 上,搜尋引擎 2 在 domain2.com 上。兩個域都在同一台伺服器上。兩者都根據使用者在搜尋引擎中輸入的內容來搜尋 domain1.com 上的網頁。兩個搜尋引擎之間的區別在於,新的搜尋引擎速度更快、結果更準確,並且使用者界面有了很大改進。這兩個搜尋引擎都將保持執行狀態,以便使用者可以在自己的時間習慣新的搜尋引擎,而不是僅僅將它們扔到深處並完全刪除舊的搜尋引擎。
無論如何,背景已經足夠了,基本上,因為可搜尋頁面使用舊搜尋引擎駐留在舊域名上,而新搜尋引擎在新域名上,…
問題:
…我可以使用 HttpModule,或 .NET 的其他部分,或來自 IIS6 的東西,甚至擷取新搜尋引擎生成的頁面連結,並動態更改附加到舊域上舊可搜尋頁面的 css 文件嗎?
原因:
實際上使它看起來像一個全新的站點,如果舊域上的搜尋引擎用於訪問舊域上的頁面,則使用舊樣式表,但如果新域上的搜尋引擎用於訪問訪問舊域名上的可搜尋文件,應使用新樣式表使舊頁面看起來煥然一新。由於有很多可搜尋的頁面,在 10,000 左右,在向頁面添加樣式表之前編輯每個頁面以添加 if 語句來檢查引用域名並不是一個現實的選擇。
環境:
舊的搜尋引擎,以及舊域上的可搜尋頁面使用 .net 1.something,但新域名上的新搜尋引擎使用 .net 3.5,而我使用 vb.net 作為 asp.net 頁面. 伺服器是 IIS6 伺服器。
- 在 IIS 中,設置 HttpHandler 以接收您想要的所有文件類型(假設您已經這樣做了)
- 使用者
Server.MapPath()獲取HttpRequest.Url.AbsolutePath物理路徑- 根據域修改路徑
- 將文件寫入響應流。
這是一個處理程序(簡化),我經常使用它來為不同域提供備用文件:
using System; using System.IO; using System.Web; public class MultiDomainFileHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { string filePath = GetDomainSpecificFilePath(context.Request.Url.Host, context.Server.MapPath(context.Request.Url.AbsolutePath)); if (File.Exists(filePath)) { switch (Path.GetExtension(filePath).ToLower()) { case ".css": context.Response.ContentType = "text/css"; break; case ".jpg": case ".jpeg": context.Response.ContentType = "image/jpeg"; break; //other types you want to handle default: context.Request.ContentType = "application/octet-stream"; break; } context.Response.WriteFile(filePath); //Write the file to response } else context.Response.StatusCode = 404; } private string GetDomainSpecificFilePath(string domain, string originalPath) { string prefix = ""; switch (domain.ToLower()) { case "intranetv2": prefix = FILE_PREFIX_INTRANETV2; break; case "www.example.com": prefix = FILE_PREFIX_EXAMPLE_DOT_COM; break; //other domains you want to handle } string dir = Path.GetDirectoryName(originalPath); string fileName = prefix + Path.GetFileName(originalPath); return Path.Combine(dir, fileName); } const string FILE_PREFIX_INTRANETV2 = "v2.", FILE_PREFIX_EXAMPLE_DOT_COM = "ex.com."; public bool IsReusable { get { return false; } } }現在,您只需要在相同目錄中有備用文件。例如:
/Images/logo.jpg
/Images/v2.logo.jpg
/Styles/mystyle.css
/Styles/v2.mystyle.css
我希望這有幫助 :)