Posted on 30 octobre 2010 in Wordpress | 53 comments

Niveau d’utilisation WP: avancé

Ce billet a été transformé en tutoriel et réécrit. Il fait suite à l’article Définir l’emplacement du dossier uploads dans WordPress, à lire aussi pour la base du procédé.

Déménager ses uploads en sous-domaine donne de l'air à votre blog

J’aimerais que toutes les images, vidéos, sons, pdf, enfin tout ce que j’uploade soit dans un sous-domaine. Exemple un sous-domaine et répertoire nommé ‘docu’, qui donnerait (chez moi) l’adresse http://docu.lashon.fr

Utilité ?

– Une moindre charge donc un accès plus rapide à vos pages.

– Un peu plus de sécurité contre les attaques virales.

Avertissement : Ce tutoriel exige d’effectuer des requêtes SQL dans la base de données. Aussi, si vous êtes effrayé rien qu’à cette idée ou trop débutant pour bien gérer ce changement sur un blog déjà en ligne et rempli d’images, n’essayez pas ceci, sauf en cas de nouvelle installation ou tout nouveau blog.

L’idéal serait de faire ça avant d’installer WordPress ou tout de suite après installation. Dans ce cas de figure voici comment procéder.

Placer son dossier uploads dans un sous-domaine sur un blog tout neuf ou à installer

1. Chez votre hébergeur dans la console d’administration

Allez dans le panneau de configuration des domaines.

Créez un sous-domaine (intitulé docu selon notre exemple choisi).

Déterminez tout de suite sa destination en cliquant sur ou en créant un dossier qui sera votre sous-domaine. Il faut compter une demi-heure pour que l’opération soit complétée. Il faudra donc indiquer dans la destination: /docu (attention au slash). Soyez vigilant, si votre blog se trouve dans un répertoire genre intitulé ‘wordpress’ (déconseillé) , il faudra  indiquer: /wordpress/docu

2. Via FTP Créer un dossier répertoire pour votre sous-domaine

Vous pouvez le faire par Filezilla mais puisque vous y êtes vous pouvez aussi bien le faire dans le panneau chez votre hébergeur (intitulé gestion des fichiers ou transfert fichiers ou manager selon).

Créer un dossier à la racine de votre hébergement. Non de votre site mais à la racine de l’hébergement proposé (selon l’hébergeur ce sera dans www ou à côté de www ou dans public_html ou dans rien).

J’ai plusieurs sites/blogs sur le même hébergement. Mais attention, pas configuré en multisites dans WP, ce qui n’est pas la même procédure. J’ai configuré chez mon hébergeur la destination de chaque domaine dans le bon répertoire. Dans mon logiciel FTP, cela donne les répertoires suivants à la racine :

domaine-du-site-un

domaine-du-site-un/sous-domaine-du-site-un

domaine-du-site-deux

domaine-du-site-trois

sous-domaine-du-site-deux

sous-domaine-du-site-trois

A noter que vous pourriez très bien partager un seul sous-domaine pour héberger les uploads des trois domaines (trois blogs). Alors ce serait comme ça à la racine de votre hébergement :

domaine-du-site-un

domaine-du-site-deux

domaine-du-site-trois

sous-domaine-du-site-un

Et dans le dossier ‘sous-domaine-du-site-un’ vous pouvez avoir ceci :

docu-de-un

docu-de-deux

docu-de-trois

Tout dépend de votre hébergement et de ce que vous voulez : plusieurs bases de données, une pour chaque domaine. Une seule base de données avec plusieurs blogs qui possèdent chacun un nom de domaine différent. Un seul domaine avec plusieurs sous-domaines qui sont autant de blogs…. Mais revenons à notre dossier uploads.

3. Dans ‘Médias’ du tableau de bord WordPress

Renseignons ce dossier répertoire dans Médias. Dans le tableau de bord de votre blog, allez à Réglages puis dans Médias . Nous devons renseigner les deux champs vides intitulés : Stocker les fichiers envoyés dans ce dossier (suivi de ‘Par défaut, wp-content/uploads’) et Adresse web complète pour les fichiers.

wp-admin-options-media

C'est dans ces réglages et pas ailleurs que se joue l'attribution du lieu de stockage de vos images uploadées

3.1 RENSEIGNER LA PREMIÈRE LIGNE QUI PARAMÈTRE LE LIEU PAR DÉFAUT DU STOCKAGE DES UPLOADS

Évitons les confusions : Définir son dossier uploads à la racine de son blog ou changer le nom du dossier n’est pas du tout la même chose que le mettre en sous-domaine.  Dans ce cas-là nous indiquons seulement ‘docu’ dans la première ligne et c’est tout. Alors quoi mettre ?

Ici il faut indiquer le chemin absolu !

Il faut donc d’abord le connaître. Pour ça, nous allons créer un fichier php avec un éditeur de texte (genre Notepad ou autre). Nommons-le par exemple chemin.php. Avec un bout de code dedans :

1
2
3
4
<?php
$p = getcwd();
echo $p;
?>
<?php
$p = getcwd();
echo $p;
?>

Chargez ce fichier espion (uploader avec Filezilla) à l’intérieur du répertoire de votre futur dossier uploads.

(exemple : dans le dossier ‘docu’ que vous avez déjà créé).

Visitez votre blog à l’adresse du fichier chargé (ici il s’agit de votre sous-domaine : docu.lashon.fr/chemin.php). Vous y verrez affiché le chemin précis et absolu du dossier en question.

Copiez ce chemin absolu dans le premier champ vide de Médias.

Le genre du chemin va changer selon votre hébergeur. Vous aurez quelque chose qui ressemble à : /homepages/8/d123456572/htdocs/nom-de-domaine/docu.

Le champ par défaut doit contenir le chemin absolu

Alors que votre hébergeur, lui, vous induit en erreur en vous renseignant peut être un truc comme /kunden/homepages/8/d123456572/htdocs/nom-de-domaine/docu, ou encore /public_html/sub etc. Le fichier que nous avons chargé sera lui totalement précis sur quoi mettre en chemin absolu.

Notez que vous pouvez mettre des sous-dossiers pour trier comme cela vous arrange dans votre sous-domaine. Pratique si vous utilisez un seul sous-domaine pour le dossier uploads de plusieurs petits blogs. Ou pour séparer les images uploads de celles de vos thèmes (si vous avez codé comme ça hein, c’est pas automatique). Par exemple vous avez /docu et vous voulez que les images uploadées aillent dans un sous-répertoire ‘fichiers-uploads’. Le chemin du dossier uploads sera donc : /homepages/8/d123456572/htdocs/nom-de-domaine/docu/fichiers-uploads

Le gros avantage de cette technique est que vous n’avez pas à vous soucier du fait que chez certains hébergeurs (comme OVH) certains sites sont à côté de www. Le fichier chemin vous dira quoi.

3.2 RENSEIGNER LA DEUXIÈME LIGNE QUI INDIQUE L’ADRESSE COMPLÈTE DES FICHIERS

Renseignez la deuxième ligne ou champ intitulé Adresse web complète pour les fichiers. Ici c’est simple, il suffit de donner l’adresse réelle, le lien en dur, soit l’adresse complète http://sous-domaine.domaine.ltd.

Dans notre exemple ça donne http://docu.lashon.fr

3.4 Optimisons les performances

Ajoutez dans votre wp-config.php :

1
2
define('UPLOADS', 'http://adresse url de votre sous-domaine');
// Ce qui donne pour l'exemple pris plus haut:define('UPLOADS', 'http://docu.lashon.fr');
define('UPLOADS', 'http://adresse url de votre sous-domaine');
// Ce qui donne pour l'exemple pris plus haut:define('UPLOADS', 'http://docu.lashon.fr');

Vous pouvez également le définir dans le fichier functions.php de votre thème. Simplement ajoutez :

1
define('UPLOADS', 'http://adresse url de votre sous-domaine');
define('UPLOADS', 'http://adresse url de votre sous-domaine');

Maintenant, faites bien attention au moment d’indiquer l’url. Ne mettez pas un slash (/) à la fin de votre adresse. Vérifiez aussi que vous n’en avez pas mis non plus en renseignant votre url dans le réglage général de l’adresse de votre site. Puis surtout, surtout, dans votre panneau d’administration de votre hébergeur, pensez logique lorsque vous indiquez une destination.

La destination de votre sous-domaine est affaire de dossiers et sous-dossiers. Si vous avez mis votre dossier docu à la racine de votre site (au sens hébergement) alors que votre wordpress est dans un dossier genre ‘blog’, c’est possible mais la prise de tête commence là. Optez pour le plus simple : suivez ce que vous avez fait par ftp et mettez ce dossier ‘docu’ de votre sous-domaine dans le même dossier que WP. Ou bien à la racine de votre site avec la bonne destination.

Comment déplacer le dossier uploads d’un blog déjà bien rempli ?

Pareil que ci-dessus. Sauf qu’il faut s’occuper du dossier existant et des liens modifiés par ce changement ! Car le ‘nouveau’ dossier uploads ne concerne que les nouvelles insertions. Aussi il faut actualiser le tout :

1) Déplacer physiquement le contenu du dossier uploads dans le dossier concerné

Ex : dans ‘docu’. Avec Filezilla toujours ou chez votre hébergeur (si possible).

REQUETES SQL

Ceci va changer dans tous vos articles et pages les chemins vers le nouveau dossier upload. Vous devez indiquer vos URL ou adapter selon votre situation !

1
2
3
4
5
6
7
UPDATE wp_posts SET  guid = REPLACE (guid, 'http://nom-domaine-du-blog/wp-content/uploads/', 'http://sous-domaine.nom-domaine-du-blog') WHERE post_type = 'attachment';
 
UPDATE wp_posts SET post_content = replace(post_content, 'http://nom-domaine-du-blog/wp-content/uploads/', 'http://sous-domaine.nom-domaine-du-blog');
 
UPDATE wp_posts SET post_content = REPLACE (post_content, 'src= »http://nom-domaine-du-blog/wp-content/uploads/', 'src= »http://sous-domaine.nom-domaine-du-blog');
 
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://nom-domaine-du-blog/wp-content/uploads/', 'http://sous-domaine.nom-domaine-du-blog');
UPDATE wp_posts SET  guid = REPLACE (guid, 'http://nom-domaine-du-blog/wp-content/uploads/', 'http://sous-domaine.nom-domaine-du-blog') WHERE post_type = 'attachment';

UPDATE wp_posts SET post_content = replace(post_content, 'http://nom-domaine-du-blog/wp-content/uploads/', 'http://sous-domaine.nom-domaine-du-blog');

UPDATE wp_posts SET post_content = REPLACE (post_content, 'src= »http://nom-domaine-du-blog/wp-content/uploads/', 'src= »http://sous-domaine.nom-domaine-du-blog');

UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://nom-domaine-du-blog/wp-content/uploads/', 'http://sous-domaine.nom-domaine-du-blog');

Ces requêtes correspondent au fait de donner dans le 1er champ l’ancienne adresse des uploads et dans le 2e la nouvelle adresse. Les revoici dans le cadre de notre exemple :

1
2
3
4
5
6
7
UPDATE wp_posts SET  guid = REPLACE (guid, 'http://www.lashon.fr/wp-content/uploads', 'http://www.docu.lashon.fr') WHERE post_type = 'attachment';
 
UPDATE wp_posts SET post_content = replace(post_content, 'http://www.lashon.fr/wp-content/uploads', 'http://www.docu.lashon.fr');
 
UPDATE wp_posts SET post_content = REPLACE (post_content, 'src= »http://www.lashon.fr/wp-content/uploads', 'src= »http://www.docu.lashon.fr');
 
UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://www.lashon.fr/wp-content/uploads', 'http://www.docu.lashon.fr');
UPDATE wp_posts SET  guid = REPLACE (guid, 'http://www.lashon.fr/wp-content/uploads', 'http://www.docu.lashon.fr') WHERE post_type = 'attachment';

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.lashon.fr/wp-content/uploads', 'http://www.docu.lashon.fr');

UPDATE wp_posts SET post_content = REPLACE (post_content, 'src= »http://www.lashon.fr/wp-content/uploads', 'src= »http://www.docu.lashon.fr');

UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'http://www.lashon.fr/wp-content/uploads', 'http://www.docu.lashon.fr');

Si vous croyez contourner SQL par l’utilisation d’un plugin magique capable de modifier vos liens vers les images ou des plugins de redirection,  je vous le déconseille. Ces plugins changeront les liens insérés dans vos articles mais pas les attachements. Autrement dit vous allez vous y perdre et les anciennes images ne seront pas affichées…

Mais il conviendrait en plus (optionnel) de signaler ces changements aux moteurs de recherche. Si vos images étaient référencées et non bloquées par le robots.txt, la redirection des images peut se faire dans le .htaccess :

1
2
# Redirection des anciennes images links
RedirectMatch 301 ^/wp-content/uploads/(.*)$    http://docu.lashon.fr$1
# Redirection des anciennes images links
RedirectMatch 301 ^/wp-content/uploads/(.*)$    http://docu.lashon.fr$1

Ceci dit, si vous avez protégés vos images contre le hotlinking, et si vous avez empêché leur indexation, on s’en fiche un peu… mais à vous de voir.

AUTRE METHODE

Ne placer AUCUN define pour définir le dossier uploads dans functions.php ou wp-config.php.

Créer un répertoire docu à la racine de son blog.

Renseigner dans Medias du tableau de bord docu à la première ligne, l’url du sous-domaine à la deuxième ligne

Chez l’hébergeur, cliquer sur son sous-domaine docu.lashon.fr, modifier les DNS et créer un CNAME puis le faire pointer vers le répertoire docu. Cette procédure varie selon l’hébergement, mutualisé ou serveur privé/virtuel. Sur un virtuel ou dédié, il suffira de créer un wildcard.

Dossier Uploads en sous-domaine

CONCLUSION

On m’a demandé si cette procédure était utile lorsqu’on utilise un cache. Sans hésiter je dis oui. Un cache, qu’il soit mis à la main ou via un plugin aide à l’optimisation de ce qui existe, rien de plus. Il n’intervient nullement sur les requêtes envoyées. Si vos images sont ailleurs dans un sous-domaine, vous gagnez en répartition des commandes (requêtes) pour afficher votre blog. Un gain de temps assuré.

On gagne donc ici sur tous les plans : Optimisation, donc un blog plus rapide, ce qui rend vos visiteurs contents, meilleur référencement du à cette rapidité accrue, et sécurité contre les robots de piratage automatiques.

Sur ce dernier point précis, le mieux eût été de déplacer tout le répertoire wp-content ailleurs… mais c’est un autre manoeuvre. Voir le code ici, explication dans le Codex (anglais) là.