通常认为从不同的子域(images1.domain.com,images2.domain.com等)提供静态内容(如图像和CSS)是一种最佳做法。我已经在various places中详细讨论了这个问题,但是我对可维护性方面的一般后勤感到担忧。
我们的网站有数千个页面,并且从相对于指向不同子域的绝对链接更改所有对静态内容的引用听起来像是一场噩梦,有哪些一般方法来实现这一点?有没有办法自动执行此操作,可能使用位于Web服务器前面的服务器并重写传入的请求以指向不同的子域?是否有任何基于此构建的框架?性能增益是否值得增加复杂性和维护成本?
编辑:我们的环境是IIS 7上的ASP.NET 3.5 SP1。
答案 0 :(得分:1)
我使用mod_rewrite在小规模上做了一次(例如一个Google链接:http://corz.org/serv/tricks/htaccess2.php)
我选择这个的原因是因为我有一些文件扩展名都在单独的服务器上。具有该扩展名的任何内容都会直接移动到子域上的相同文件结构。你的情况可能不一样。
这是一个小规模的解决方案,不确定对数千人这样做的性能影响。为此,我可能会尝试使用脚本进行文本搜索/替换。
答案 1 :(得分:0)
EWWW !!对我来说听起来非常不成熟。除非你仔细地对此进行基准测试,否则我会把这个“改进”放在我的待办事项清单上。
如果你真的想这样做,你应该在生成HTML时添加额外的间接层(后面是伪JSP语法)。而不是:
<img src="http://images.mysite.com/image/image1.gif"/>
DO
<img src="${image:url(image1.gif)}"/>
并拥有image:url生成随机虚拟主机或其他内容;您可以在以后重新定义image:url的工作方式。
如果不可能,我相信Eran Kampf的答案是正确的;用Java-parlance,你可以使用ServletFilter。
答案 2 :(得分:0)
我做过一次,但幸运的是,我之前的人没有使用相对链接,他们使用了常量文件(大部分),所以它相对容易。
我认为这是一个好主意,它将为您提供可扩展性选项。也许搜索.jpg和.gif的代码库并创建一个宏以将子域附加到路径的根目录。请务必创建一个返回子域的函数,以便您可以在中心位置存放子域的逻辑。
答案 3 :(得分:-1)
一种可能的方法可能是使用客户端Javascript(jQuery?)来遍历所有相关链接并将其更改为指向静态位置。
由于你想在不破坏浏览器缓存的情况下使用多个域,我会在文件名上使用一些哈希来确保名称始终指向同一个子域...