Способ изменить URL-адреса изображений в публикации на URL-адрес изображения cdn?


По какой-то причине моя хостинговая компания не может исправить, использую ли я общий кэш w3 или супер кэш w3 для кэширования, использование sql моего сайта продолжает расти.... и на высоких скачках серверы иногда отстают и падают.

Для этого я должен использовать плагин hyper cache для кэша, так как он отлично работает, но этот плагин не поддерживает cdn.. я купил услугу cdn у maxcdn, но для этого мне придется использовать общий кэш w3 или супер кэш...

Поэтому я ищу способ автоматического изменения URL-адреса изображений для публикации, например: http://www.sitename.com/wp-content/uploads..... к http://cdn.sitename.com/wp-content/uploads ...

Возможно ли это? если да, пожалуйста, помогите. Заранее благодарю

Author: Ayaz Malik, 2012-04-19

5 answers

Вы можете анализировать изображения с помощью регулярного выражения в the_content; но всегда загружается и медленно. Возможно, вы измените URL-адрес изображений после post_save в базе данных или измените текущие записи внутри базы данных и создайте собственный CDN. Это быстрый способ, и у всех плагинов кэширования есть перерыв, что она должна анализировать контент. Для получения справочной информации о пользовательском CDN в WP см. этот ответ.

 1
Author: bueltge, 2017-04-13 12:37:54

Вы смотрели на этот плагин? http://wordpress.org/extend/plugins/cdn-rewrites/

Из описания плагина:

В принципе, этот плагин позволяет пользователю WordPress указывать две важные переменные: исходный хост (ваш сайт) и "конечный хост" (хост cdn). Затем он найдет все статическое содержимое с этого исходного хоста и перепишет их в пункт назначения, чтобы они были доставлены оттуда.

Похоже, это то, что вы нужно?

------------------------------ РЕДАКТИРОВАТЬ

Если вы пытаетесь избежать использования плагинов, вот отличная статья об этом: http://www.cyberciti.biz/tips/wordpress-cdn-content-delivery-network-configuration.html

Однако я никогда не пробовал этот метод. Но это выглядит как чистое решение.

 3
Author: Starfs, 2012-04-27 13:20:19

Если изображения остаются в том же месте, и вы хотите изменить только поддомен, .htaccess перезаписать будет проще всего:

Если правило применимо только к изображениям, то:

RewriteCond   %{HTTP_HOST}   =www.sitename.com
RewriteRule   ^.+\.(jpe?g|png|other|img|ext)$   http://cdn.sitename.com/$0   [nocase,redirect=temp,last]

Вы можете добавить тест перезаписи для изображений, но тест, выполняемый в RewriteCond, использует те же ресурсы, что и один раз в RewriteRule.

Вы также можете перенаправить все, что находится в каталоге загрузок. если cdn.sitename.com проходит через то же самое правило.htaccess установите, я бы включил второе утверждение перезаписи:

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

(автоматическое изменение/форматирование синтаксиса не было разработано с учетом.htaccess:-)

Приветствия,
Грегори

 3
Author: Gregory, 2012-05-01 16:24:36

Если вы хотите жестко закодировать изменения src img, эта функция будет для вас; wp_update_post($post); в сочетании с циклом, который проходит через каждый пост и тип post_type, на который вы хотите повлиять, и с помощью preg_replace для замены URL src.

Назначьте шаблон странице, загружайте страницу всякий раз, когда вы хотите обновить URL-адрес src, удаляйте страницу всякий раз, когда вы не хотите разрешать другим запускать код.

Функция grep_replace() выполняет поиск/замену шаблоны будут выглядеть примерно так:

Поиск: (<img [^>]*?src=['"]https?://)www\.sitename\.com
заменить: $1cdn.sitename.com

Или более конкретно:

Поиск: (<img [^>]*?src=['"]https?://)www(\.sitename\.com/wp-content/uploads/)
заменить: $1cdn$2

Несмотря на то, что wp_update_post() автоматически создает ревизию, если вам нужно отменить изменение, создайте резервную копию базы данных перед загрузкой страницы.

Я бы сначала протестировал комбинацию loop, wp_update_post() и preg_replace() на ограниченном найденном наборе сообщений, возможно, указав идентификаторы тематических сообщений в массив и прохождение через этот массив.

Дополнительным вариантом может быть создание новой временной категории "Обновлено CDN" и присвоение новой категории каждой публикации по мере ее обновления. затем вы можете исключить любые сообщения с этим термином категории из будущих запросов на обновление. единственным небольшим недостатком этого является то, что даже если вы позже удалите категорию, значения все равно будут сохранены для каждой записи в бд (поправьте меня, если я ошибаюсь).

Приветствия,
Грегори

 1
Author: Gregory, 2012-05-02 06:13:05

Вы также можете подключиться к действию pre_post_update.

Преимущество этого в том, что вашему серверу просто нужно один раз обменять URL-адреса, поэтому вы не всегда используете сценарий str_replace, который вы написали при доставке, но при сохранении.

Поскольку я предполагаю, что вы знакомы с самой заменой, просто поместите свою функцию в эту функцию, и все!

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

function change_image_urls( $post_id ) {

    // your function here...

    // $post = get_post( $post_id );

}
 0
Author: fischi, 2012-05-01 17:09:18