更新 1:
我现在已经设置了 IIS6,因此 .NET 可以处理对 .css 文件的调用。我现在该怎么做才能让它根据引用 url 更改 css 文件?所以如果引荐网址是 http://intranet/ ,它应该继续调用旧样式表。如果引荐网址是 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 服务器。
最佳答案
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; } }
}
现在,您只需要在相同目录中有备用文件。例如:
/图像/标志.jpg
/Images/v2.logo.jpg
/样式/mystyle.css
/Styles/v2.mystyle.css
我希望这会有所帮助:)
关于.net - .NET 可以拦截和更改 css 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6200427/