Обслуживание статического контента с субдомена в asp.net с использованием перезаписи URL - PullRequest
0 голосов
/ 24 февраля 2011

Искал несколько часов безрезультатно, так что вот так ...

У меня есть домен, который получает довольно много обращений в день, и меня спросили, могу ли я обслуживать статический контент с субдомена. Поскольку сайт довольно обширный и уже написан, мне было интересно, можно ли каким-либо образом использовать перезапись URL для изменения:

www.example.com / image.gif

до

static.example.com / image.gif

У меня есть решение, которое работает с использованием перенаправления 301, но насколько я понимаю, это контрпродуктивно, так как для каждого изображения нужно будет сделать 2 запроса. Я действительно не хочу просматривать все страницы aspx и CSS, чтобы жестко запрограммировать новый URL, так как это вызовет проблемы в дальнейшем - некоторые части сайта все еще находятся в стадии разработки, и статический контент может измениться в любое время. Я попытался использовать перезапись (в отличие от перенаправления), чтобы изменить URL, но получилось что-то вроде:

http://www.example.com/http://static.example.com/image.gif

Как бы вы этого достигли? У меня есть полный доступ к DNS и серверу (win 2008r2 / IIS 7.5), поэтому я могу внести любые изменения, если перезапись URL-адреса не является ответом.

Заранее спасибо

Том.

1 Ответ

1 голос
/ 24 февраля 2011

Вы можете сделать это с помощью HttpModule.В следующем примере фиксируются все запросы на gif-файлы и изменяется абсолютный путь, указывающий на альтернативный сайт, на котором размещен статический контент.Попробуйте этот метод внутри HttpModule:

    private void Application_BeginRequest(Object source, EventArgs e)
    {
        // Create HttpApplication and HttpContext objects to access
        // request and response properties.
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;
        string filePath = context.Request.FilePath;
        string fullPath = context.Request.Url.AbsoluteUri;
        string fileExtension = VirtualPathUtility.GetExtension(filePath);
        if (fileExtension.Equals(".gif"))
        {
            context.Response.ContentType = "image/gif";
            context.Response.Redirect(fullPath.Replace("www.example.com", "static.example.com"));
        }
    }

Чтобы узнать больше о HttpModule, перейдите по ссылке: http://msdn.microsoft.com/en-us/library/ms227673.aspx

Я протестировал приведенный выше код - он работает.Надеюсь, это поможет.

...