web-dev-qa-db-fra.com

Un moyen de changer les URL des images postées en URL de l'image cdn?

pour une raison quelconque, ma société d'hébergement n'est pas en mesure de résoudre le problème si j'utilise le cache total w3 ou le super cache w3 pour la mise en cache de l'utilisation de mon site sur mon site ne cesse de prendre de l'ampleur ... et que, sur les pointes élevées, les serveurs deviennent parfois lents et en retard.

Pour cela, je dois utiliser un plugin hyper cache pour le cache car il fonctionne parfaitement, mais ce plugin ne prend pas en charge le cdn .. j'ai acheté un service cdn de maxcdn mais pour cela, je dois utiliser le cache total ou le super cache w3. .

Je recherche donc un moyen de modifier automatiquement l’URL des images de poste, par exemple: http://www.sitename.com/wp-content/uploads ..... en http: // cdn .sitename.com/wp-content/uploads ...

c'est possible ? si oui s'il vous plaît aidez. Merci d'avance

1
Ayaz Malik

Vous pouvez analyser via regex des images dans the_content; mais est toujours charger et lentement. Peut-être que vous modifiez l'URL des images, après post_save dans la base de données, ou modifiez les publications actuelles dans la base de données et créez un CDN personnalisé. C'est le moyen rapide et tous les plugins de mise en cache a la pause, qu'elle doit analyser le contenu. Pour l’arrière-plan, un CDN personnalisé dans WP voir cette réponse .

1
bueltge

.htaccess RewriteRule serait le plus facile si les images restent au même endroit et que vous ne voulez que changer de sous-domaine.

si la règle ne s'applique qu'aux images, alors:

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

vous pouvez ajouter un test RewriteCond pour les images, mais le test effectué dans RewriteCond utilise les mêmes ressources que celui utilisé une fois dans RewriteRule.

vous pouvez également tout rediriger dans le répertoire de téléchargement. Si cdn.sitename.com utilise le même jeu de règles .htaccess, j'inclurais l'instruction RewriteCond:

RewriteCond   %{HTTP_Host}   =www.sitename.com
RewriteRule    ^wp-content/uploads/.+$   http://cdn.sitename.com/$0   [nocase,redirect=temp,last]

[redirect = temp] ou [redirect = permanent]; souvent écrit comme [R = 302] et [R = 301].

Documentation Apache mod_rewrite

(la syntaxe automatique hiliting/formating n'a pas été conçue avec .htaccess à l'esprit :-)

à votre santé,
Gregory

3
Gregory

Avez-vous regardé ce plugin? http://wordpress.org/extend/plugins/cdn-rewrites/

De la description du plugin:

Fondamentalement, ce plugin permet à un utilisateur de WordPress de spécifier deux variables importantes: un hôte d'origine (votre site) et un "hôte de destination" (hôte cdn). Il trouvera ensuite tous les contenus statiques de cet hôte d'origine et les réécrira dans la destination afin qu'ils soient livrés à partir de là.

Cela semble être ce dont vous avez besoin?

------------------------------ MODIFIER

Si vous essayez d'éviter d'utiliser des plugins, voici un excellent article: http://www.cyberciti.biz/tips/wordpress-cdn-content-delivery-network-configuration.html

Cependant, je n'ai jamais essayé cette méthode. Mais cela ressemble à une solution propre.

3
Starfs

si vous souhaitez coder en dur les modifications apportées par img src, cette fonction vous conviendra; wp_update_post ($ post) ; couplé avec une boucle qui passe à travers chaque post et type de post que vous voulez affecter, et en utilisant preg_replace pour remplacer l'URL de src.

assignez le modèle à une page, chargez la page à chaque fois que vous souhaitez mettre à jour l'URL du src, supprimez la page lorsque vous ne souhaitez pas autoriser d'autres personnes à exécuter le code.

les modèles de recherche/remplacement de grep_replace () ressembleraient à ceci:

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

ou plus spécifiquement:

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

même si wp_update_post () crée automatiquement une révision si vous devez annuler la modification, sauvegardez la base de données avant de charger la page.

Je testais d'abord la boucle, la combinaison wp_update_post () et preg_replace () sur un ensemble limité de publications, en spécifiant éventuellement l'ID des publications de sujet dans un tableau et en parcourant ce tableau.

une option supplémentaire peut être de créer une nouvelle catégorie temporaire 'CDN Updated' et d'attribuer la nouvelle catégorie à chaque publication à mesure que vous la mettez à jour. vous pouvez alors supprimer toutes les publications avec ce terme de catégorie dans les futures requêtes de mise à jour. Le seul petit inconvénient est que même si vous supprimez ultérieurement la catégorie, les valeurs seraient toujours enregistrées pour chaque publication de la base de données (corrigez-moi si je me trompe).

à votre santé,
Gregory

1
Gregory

vous pouvez également vous accrocher à l'action pre_post_update.

l'avantage de ceci est que votre serveur doit juste échanger les URL une fois. Vous n'utilisez donc pas toujours le script str_replace que vous avez écrit lors de la livraison, mais lors de la sauvegarde.

comme je suppose que vous connaissez le remplacement lui-même, mettez simplement votre fonction dans cette fonction et le tour est joué!

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

function change_image_urls( $post_id ) {

    // your function here...

    // $post = get_post( $post_id );

}
0
fischi