我有一个网站,该网站大量使用 JavaScript 并与 .NET C# RPC 服务通信。我们遇到了客户端浏览器缓存 javascript 的问题,因此我们最终决定将版本号附加到 URL,以强制他们使用最新的 javascript,从而解决缓存问题。因此,对于每个新版本,我们都必须使用新的虚拟路径在 IIS 中创建一个新的应用程序/虚拟文件夹。例如:
http://example.com/websiteVersion10
我们的根目录有一个 C# Web 应用程序,它将请求从基本 URL 重定向到正确的最新版本,因此如果有人输入 http://example.com ,他们将被重定向到 http://example.com/latestwebsiteversion 。该应用程序使用自定义 XML 配置文件来读取最新版本,我们会在每个版本中更新该版本。
但是,我们发现客户端会将完整的“重定向到”URL 添加为书签,而不是键入 http://example.com当 URL 由于我们发布了新版本而过时时,它们将开始收到 404 错误页面,除非我们在 IIS 中保留旧的虚拟路径。
现在避免这种情况的一种方法是在 IIS 中保留所有旧的虚拟路径,并在每个过时的网站中放置一个重定向页面以重定向到最新版本,但我们确实经常发布,所以我知道我们最终会产生大量虚拟路径和物理文件夹很快就会过时。
我尝试使用自定义 404 错误页面从那里重定向回最新版本,如下所示:
if(OLD_URLs){
Response.StatusCode = 200;
Response.Redirect(LATEST_URL);
}
但这不起作用,而是显示空白页面。
是否有比在 IIS 中维护所有旧虚拟路径更简洁的解决方案来实现此目的?
最佳答案
如果我理解正确的话,您正在创建虚拟目录以确保提供最新的 javascript 文件?
您应该知道,通过将新的查询字符串变量附加到脚本引用的每个新版本,您将执行缓存清除,浏览器将下载最新版本:
<script type="text/javascript" src="myscript.js?v=1"></script>
如果您更新查询字符串变量,myscript.js
将再次重新下载,无论缓存中有什么:
<script type="text/javascript" src="myscript.js?v=2"></script>
根据您使用的 ASP.Net 版本,您在利用 bundle 时可以免费获得此版本。捆绑所有 CSS 和脚本,将站点设置为 Release模式,ASP.Net 会将缓存清除查询字符串附加到您的引用中。
关于c# - 从旧 URL 重定向到最新已知 URL 的巧妙方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21479962/