从旧URL重定向到最新已知URL的简洁方法

时间:2014-01-31 12:20:34

标签: c# javascript asp.net iis-8 url-redirection

我有一个网站,它大量使用javascript并与.NET C#RPC服务进行对话。我们遇到了客户端浏览器缓存javascript的问题,因此我们最终决定将版本号附加到URL,以强制他们使用最新的javascript,并绕过缓存问题。因此,对于每个新版本,我们必须使用新的虚拟路径在IIS中创建新的应用程序/虚拟文件夹。例如:

http://example.com/websiteVersion10

我们在根目录下有一个C#Web应用程序,它会将请求从基本网址重定向到正确的最新版本,因此如果有人输入http://example.com,他们就会被重定向到http://example.com/latestwebsiteversion。该应用程序使用自定义XML配置文件来读取我们随每个版本更新的最新版本。

但是我们发现客户端会将完整的“重定向到”网址加入书签,而不是键入http://example.com,当网址因为我们发布新版本而过时,他们会开始获得404错误页面,除非我们在IIS中保留旧的虚拟路径。

现在避免这种情况的一种方法是将所有旧的虚拟路径保留在IIS中,并在每个过时的网站中放置一个重定向页面以重定向到最新版本,但我们经常发布版本,所以我知道我们最终将会出现虚拟负载和物理过时的文件夹很快。

我尝试使用自定义404错误页面从那里重定向回到最新版本使用类似的东西:

if(OLD_URLs){
    Response.StatusCode = 200;
    Response.Redirect(LATEST_URL);
}

但这不起作用,而是显示空白页面。

是否有一个更简洁的解决方案,而不是维护IIS中的所有旧虚拟路径来实现这一目标?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您正在创建虚拟目录以确保您提供最新的JavaScript文件?

您应该知道,通过在每个新版本的脚本引用中添加一个新的查询字符串变量,您将执行缓存区域,浏览器将下载最新版本:

<script type="text/javascript" src="myscript.js?v=1"></script>

如果更新querystring变量,则无论缓存中的内容是什么,都将重新下载myscript.js

<script type="text/javascript" src="myscript.js?v=2"></script>

根据您使用的ASP.Net版本,您可以在使用捆绑包时免费获得此版本。捆绑所有CSS和脚本,将您的站点设置为发布模式,ASP.Net将向您的引用添加缓存查询字符串。

参考:http://www.dotnet-tricks.com/Tutorial/mvc/c72b040113-Asp.net-MVC-4-performance-optimization-with-bundling-and-minification.html