有没有办法将POST中的图片URL更改为CDN图片URL?

时间:2012-04-19 作者:Ayaz Malik

由于某些原因,如果我使用w3 total cache或w3 super cache来缓存我的站点,我的托管公司无法修复sql使用率不断达到峰值的问题。。。。在高峰值时,服务器有时会出现滞后和停机。

为此,我必须使用hyper cache插件进行缓存,因为它工作得非常完美,但该插件不支持cdn。。我已经从maxcdn购买了cdn服务,但为此我必须使用w3 total cache或super cache。。。

因此,我正在寻找一种自动更改帖子图像url的方法,例如:http://www.sitename.com/wp-content/uploads..... 到http://cdn.sitename.com/wp-content/uploads...

有可能吗?如果是,请帮助。提前感谢

5 个回复
最合适的回答,由SO网友:bueltge 整理而成

您可以通过regex解析中的图像the_content; 但总是负载缓慢。也许你改变了图片的urlpost_save 或更改数据库中的当前帖子,并创建自定义CDN。这是一种快速的方式,所有缓存插件都有一个突破,即她必须解析内容。有关WP中自定义CDN的背景信息,请参阅this answer.

SO网友:Starfs

你看过这个插件吗?http://wordpress.org/extend/plugins/cdn-rewrites/

根据插件的描述:

基本上,这个插件允许WordPress用户指定两个重要变量:orgin主机(您的站点)和“destination主机”(cdn主机)。然后,它将找到来自该源主机的所有静态内容,并将它们重写到目标主机中,以便从那里传递它们。

这似乎是你需要的?

------------------------------编辑

如果试图避免使用插件,这里有一篇关于它的好文章:http://www.cyberciti.biz/tips/wordpress-cdn-content-delivery-network-configuration.html

然而,我从未尝试过这种方法。但这看起来是一个干净的解决方案。

SO网友:Gregory

如果图像保持在同一位置,而您只想更改子域。htaccess重写规则是最简单的:

如果该规则仅适用于图像,则:

RewriteCond   %{HTTP_HOST}   =www.sitename.com
RewriteRule   ^.+\\.(jpe?g|png|other|img|ext)$   http://cdn.sitename.com/$0   [nocase,redirect=temp,last]
您可以为图像添加RewriteCond测试,但在RewriteCond中执行的测试使用的资源与在RewriteRule中执行一次相同。

您还可以重定向uploads目录中的所有内容。如果cdn。sitename。com也经历了同样的过程。htaccess规则集,我将包括RewriteCond语句:

RewriteCond   %{HTTP_HOST}   =www.sitename.com
RewriteRule    ^wp-content/uploads/.+$   http://cdn.sitename.com/$0   [nocase,redirect=temp,last]
[重定向=临时]或[重定向=永久];通常写为[R=302]和[R=301]。

apache mod_rewrite documentation

(自动语法hiliting/格式化的设计没有考虑到.htaccess:-)

干杯,格雷戈里

SO网友:Gregory

如果您想硬编码img src更改,这将是适合您的函数;wp_update_post( $post ); 再加上一个循环,该循环遍历您想要影响的每个post和post\\u类型,并使用preg_replace 替换src url。

将模板分配给一个页面,在需要更新src url时加载该页面,在不允许其他人运行代码时删除该页面。

grep\\u replace()搜索/替换模式如下所示:

搜索:(<img [^>]*?src=[\'"]https?://)www\\.sitename\\.com
更换:$1cdn.sitename.com

或者更具体地说:

搜索:(<img [^>]*?src=[\'"]https?://)www(\\.sitename\\.com/wp-content/uploads/)
更换:$1cdn$2

即使wp\\u update\\u post()会自动创建一个修订,如果您需要撤销更改,请在加载页面之前备份数据库。

首先,我会在找到的一组有限的帖子上测试循环、wp\\u update\\u post()和preg\\u replace()组合,可能会在数组中指定主题帖子的ID,然后逐步遍历该数组。

另一个选项可能是创建一个新的临时类别“CDN Updated”,并在更新时将新类别分配给每个帖子。然后,您可以在将来的更新查询中省略任何具有此类别术语的帖子。这样做的一个小缺点是,即使稍后删除该类别,也会为db中的每个帖子保存值(如果我错了,请更正我)。

干杯,格雷戈里

SO网友:fischi

您还可以挂接到pre\\u post\\u更新操作。

这样做的好处是,您的服务器只需要交换一次URL,所以您并不总是使用交付时编写的str\\u replace脚本,而是在保存时使用。

我假设您熟悉替换本身,只需将您的函数放入这个函数中,就可以了!

add_action(\'pre_post_update\', \'change_image_urls\', 10 );

function change_image_urls( $post_id ) {

    // your function here...

    // $post = get_post( $post_id );

}

结束

相关推荐

Images not showing on blog

今天早上我wordpress博客上的大部分图片(http://records.photodharma.net)已停止加载。这甚至发生在嵌入式系统上。此处嵌入的所有图像:http://records.photodharma.net/photos/chiang-mai-photo-albums-of-modern-structures 当我在Firebug中查看它们时,它们会出现,但不会出现在页面上。有几次我看到图像加载后不久就消失了,所以它们似乎试图加载,但被阻止了。我做了一些搜索,并尝试了各种方法,如更新