.NET可以拦截和更改css文件吗?

osh*_*nen 13 .net asp.net httpmodule .net-1.0 .net-3.5

更新1:

我现在已经设置了IIS6,因此.NET可以处理对.css文件的调用.我现在要做什么来让它根据referal url更改css文件?因此,如果referal url是http:// intranet/,它应该继续调用旧样式表.如果referal 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服务器.

Vai*_*arg 2

  1. 在 IIS 中,设置 HttpHandler 来接收您想要的所有文件类型(表示您已完成此操作)
  2. 用户Server.MapPath()获取HttpRequest.Url.AbsolutePath物理路径
  3. 根据域修改路径
  4. 将文件写入响应流。

这是一个处理程序(简化的),我经常使用它来为不同域提供备用文件:

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; } }
}
Run Code Online (Sandbox Code Playgroud)

现在,您只需要在同一目录中拥有备用文件即可。例如:

/图片/标志.jpg

/图片/v2.logo.jpg

/样式/mystyle.css

/样式/v2.mystyle.css

我希望这有帮助 :)