我现在安装了IIS6,所以.NET可以处理对.css文件的调用.现在我需要做些什么来改变基于引用URL的css文件?所以如果引用url是http://intranet/,它应该继续调用旧样式表.如果引用url是http://intranetv2/,它应该调用新的样式表.
原题:
的背景:
我有2个搜索引擎. 1是旧的,而另一个是全新的(开发阶段).搜索引擎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服务器.
解决方法
> HttpRequest.Url.AbsolutePath上的用户Server.MapPath()获取物理路径
>根据域修改路径
>将文件写入响应流.
这是一个处理程序(简化的),我常规地使用不同域的服务器备份文件:
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
我希望这有帮助 :)