首页 > 如何将服务器的图片输出统一替换为一个指定地址?

如何将服务器的图片输出统一替换为一个指定地址?

在一个网站存有各个图片:
1.http://www.example.com/attach/1.jpg
2.http://www.example.com/attach/2.jpg
.
.
.
服务器在输出HTML时会原封不动输出这些图片地址,现在由于需要,必须在服务器输出这些图片时将这些图片地址提前改为:
1.http://www.anotherserver.com/attach/1.jpg
2.http://www.anotherserver.com/attach/2.jpg
.
.
.
这样一来就不用请求原来的www.example.com了,我原来尝试用js在DOM ready后遍历图片节点进行替换,但是无论怎样都要请求原来的www.example.com,所以只能寄希望在服务器输出HTML之前替换,是否有一个服务器图片输出的统一“出口”,在这个“出口”处统一替换?请问能不能有最简单的方法实现?


特定情况下可以考虑使用<base href="http://www.anotherserver.com" />


不要以任何形式储存静态文件的绝对路径, 无论是为了应付独立的CDN服务器,还是自己配置的文件主机。把域名和URI分开储存都是更科学的方法。把CDN的域名存储在配置文件中, 在模板中用配置文件中的域名 + 静态文件相对于域名的路径去组合成绝对路径输出。这样才方便你在任何时候一瞬间就改掉站点的静态文件服务器域名。


可以用nginx 将www.example.com图片的请求全部转发到 www.anotherserver.com


  1. 通过Nginx把www.example.com图片的请求全部转发到 www.anotherserver.com,上面已经有人说了,此方法可行。
  2. 如果能修改代码,可以借助于工具(比如sublime,notepad++),通过正则表达式匹配找到全站含有http://www.example.com/**/*.jpg的img标签,把www.example.com换成${image-host},image-host是可配置的,部署的时候通过sed命令统一做替换。

PHP的话,不是可以用ob_start();ob_get_contents();来把整个url替换后再输出么~


这是使用又拍云等CDN时必须做的事。

一般是在php等程序代码里,想办法直接替换掉。

在http服务器层面上统一替换,实践不太好(注1),不过也能做,需要先按照你的http服务器软件是什么,再查有无对应插件做这个事。

也可以用重写规则,让特定的url虽然仍然请求老域名,但立刻被301跳转到新域名那边,流量就全是新域名承担了。

只有原则没有细则,不再加以进一步的解释。

注1:酷壳说过——修正要修在上游的root cause上。


1,nginx转向,楼上已说
1,写个脚本/小程序,遍历项目文件,匹配规则,写入www.example.com

【热门文章】
【热门文章】