Niveau d’utilisation WP : avancé
Ce billet a été redéveloppé en tutoriel et rédigé différemment. Il fait suite à l’article « Définir l’emplacement du dossier uploads dans WordPress », qu’il est conseillé de lire pour avoir des bases solides sur le sujet.
J’aimerais que toutes mes images, vidéos, sons et fichiers PDF soient rangés dans un sous-domaine. Par exemple, en utilisant un sous-domaine et un répertoire nommé ‘docu’, cela correspondrait (chez moi) à l’adresse http://docu.lashon.fr.
Utilité
- Réduction de la charge, et donc un accès plus rapide à vos pages.
- Un niveau de sécurité amélioré contre les attaques malveillantes.
Avertissement : Ce tutoriel nécessite l’exécution de requêtes SQL dans votre base de données. Si cette idée vous effraie ou si vous êtes trop novice pour gérer efficacement ce changement sur un blog actif rempli d’images, je vous conseille de ne pas tenter cela, sauf en cas de nouvelle installation ou si c’est un tout nouveau blog.
Il est préférable d’effectuer cette opération avant ou immédiatement après l’installation de WordPress. Voici la méthode à suivre pour placer son dossier uploads dans un sous-domaine sur un nouveau blog ou lors d’une installation.
Placer son dossier uploads dans un sous-domaine sur un nouveau blog
1. Dans la console d’administration de votre hébergeur
Accédez au panneau de configuration des domaines.
Créez un sous-domaine (appelons-le “docu” comme dans notre exemple).
Indiquez directement sa destination en cliquant sur ou en créant un dossier qui sera associé à ce sous-domaine. Prévoir une demi-heure pour que l’opération soit finalisée ; il faudra donc spécifier dans la destination : /docu (attention au slash). Restez vigilant : si votre blog se trouve dans un répertoire nommé ‘wordpress’ (ce qui est déconseillé), vous devrez indiquer : /wordpress/docu.
2. Créer un répertoire pour votre sous-domaine via FTP
Vous pouvez utiliser Filezilla, mais vous pouvez également effectuer cette opération directement via le panneau de votre hébergeur (sous “gestion des fichiers” ou “transfert fichiers”).
Créez un dossier à la racine de votre hébergement, non pas à partir du nom de votre site, mais à partir de la racine de l’hébergement proposé (selon l’hébergeur, cela sera dans www, à côté de www, dans public_html ou dans le vide).
J’ai plusieurs sites/blogs sous le même hébergement, mais attention, ils ne sont pas configurés en multisites dans WP, ce qui nécessiterait une autre procédure. J’ai configuré chez mon hébergeur la destination de chaque domaine vers le bon répertoire. Cela se traduit dans mon logiciel FTP par ces répertoires à 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
Notez que vous pourriez très bien partager un seul sous-domaine pour héberger les uploads des trois domaines (trois blogs), ce qui donnerait à 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’, cela pourrait inclure :
docu-de-un docu-de-deux docu-de-trois
Tout cela dépend de votre hébergement et de vos besoins : plusieurs bases de données, une pour chaque domaine, ou une seule base de données avec plusieurs blogs ayant chacun leur propre domaine, ou encore un seul domaine avec plusieurs sous-domaines. Mais revenons à notre dossier uploads.
3. Dans ‘Médias’ du tableau de bord WordPress
Nous allons renseigner ce répertoire dans Médias. Dans le tableau de bord de votre blog, dirigez-vous vers Réglages, puis Médias. Vous devez remplir 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”.
3.1 Renseigner la première ligne pour définir le lieu par défaut du stockage des uploads
Évitons toute confusion : définir son dossier uploads à la racine de son blog ou renommer le dossier n’est pas équivalent à le placer en sous-domaine. Dans ce cas, nous spécifions simplement ‘docu’ dans la première ligne, et c’est tout. Que mettre alors ?
Ici, il faut fournir le chemin absolu !
Il est donc essentiel de le connaître. Pour cela, créez un fichier PHP avec un éditeur de texte (comme Notepad ou autre). Nommez-le par exemple chemin.php et ajoutez-y le code suivant :
Chargez ce fichier (en utilisant Filezilla) à l’intérieur du répertoire prévu pour votre futur dossier uploads (exemple : dans le dossier ‘docu’ que vous avez créé).
Visitez votre blog à l’adresse du fichier téléchargé (dans ce cas, votre sous-domaine : docu.lashon.fr/chemin.php). Vous y trouverez le chemin absolu du dossier. Copiez ce chemin absolu dans le premier champ vide des Médias.
Le format du chemin variera selon votre hébergeur. Vous obtiendrez quelque chose comme : /homepages/8/d123456572/htdocs/nom-de-domaine/docu.
Il se peut que votre hébergeur vous fournisse des informations erronées avec des chemins tels que /kunden/homepages/8/d123456572/htdocs/nom-de-domaine/docu ou /public_html/sub etc. Le fichier que nous avons téléchargé vous indiquera le chemin absolu correct.
Notez que vous pouvez également créer des sous-dossiers pour organiser vos fichiers comme bon vous semble dans votre sous-domaine. Cela est très pratique si vous utilisez un seul sous-domaine pour héberger les uploads de plusieurs petits blogs, ou pour séparer les images uploads de celles de vos thèmes (si vous avez codé cela de cette façon, ce qui n’est pas automatique). Par exemple, vous avez /docu et souhaitez que les images uploadées soient placées dans un sous-répertoire ‘fichiers-uploads’. Le chemin du dossier uploads serait alors : /homepages/8/d123456572/htdocs/nom-de-domaine/docu/fichiers-uploads.
Le principal avantage de cette technique est que vous n’avez pas à vous soucier des variations selon les hébergeurs (comme OVH) où certains sites se retrouvent à côté de www. Le fichier chemin vous indiquera quoi entrer.
3.2 Renseigner la deuxième ligne avec l’adresse complète des fichiers
Remplissez le champ intitulé “Adresse web complète pour les fichiers”. Ici, c’est simple, vous devez fournir l’adresse réelle, avec le lien direct, soit l’adresse complète http://docu.lashon.fr.
3.4 Optimiser les performances
Ajoutez dans votre wp-config.php :
define('UPLOADS', 'http://adresse url de votre sous-domaine'); // Ce qui donnerait pour notre exemple : define('UPLOADS', 'http://docu.lashon.fr');
Vous pouvez également le définir dans le fichier functions.php de votre thème. Il suffira d’ajouter :
define('UPLOADS', 'http://adresse url de votre sous-domaine');
Faites attention en indiquant l’url. Ne mettez pas de slash (/) à la fin de votre adresse. Vérifiez également que vous n’en avez pas mis lors de la saisie de l’url dans les réglages généraux de l’adresse de votre site. Enfin, assurez-vous d’être cohérent lorsque vous spécifiez une destination dans votre panneau d’administration de l’hébergeur.
La destination de votre sous-domaine implique des dossiers et sous-dossiers. Si vous avez mis votre dossier docu à la racine de votre site (en termes d’hébergement) alors que votre WordPress se trouve dans un dossier comme ‘blog’, cela est possible mais peut devenir complexe à gérer. Optez pour la simplicité : suivez ce que vous avez configuré via FTP et placez le 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 ?
C’est très similaire à ce qui précède, à l’exception qu’il faut s’occuper du dossier existant et mettre à jour les liens en raison de ce changement ! Le ‘nouveau’ dossier uploads n’affectera que les nouvelles insertions. Il faut donc actualiser tout le reste :
1) Déplacer physiquement le contenu du dossier uploads
Mettez-le dans le répertoire concerné, par exemple dans ‘docu’. Vous pouvez le faire via Filezilla ou sur votre hébergeur (si cela est réalisable).
REQUETES SQL
Cela mettra à jour tous vos articles et pages avec les chemins vers le nouveau dossier upload. Vous devez indiquer vos URL ou adapter selon votre situation !
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 remplacent dans le premier champ l’ancienne adresse des uploads par la nouvelle adresse. Voici ce qu’elles donneraient dans notre exemple :
UPDATE wp_posts SET guid = REPLACE (guid, 'https://lashon.fr/wp-content/uploads', 'http://www.docu.lashon.fr') WHERE post_type = 'attachment'; UPDATE wp_posts SET post_content = replace(post_content, 'https://lashon.fr/wp-content/uploads', 'http://www.docu.lashon.fr'); UPDATE wp_posts SET post_content = REPLACE (post_content, 'src= »https://lashon.fr/wp-content/uploads', 'src= »http://www.docu.lashon.fr'); UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'https://lashon.fr/wp-content/uploads', 'http://www.docu.lashon.fr');
Attention, essayer de contourner SQL par un plugin qui prétend modifier vos liens d’images ou un plugin de redirection est déconseillé. Ces plugins ne changeront pas les liens des attachements. Vous risqueriez de perdre la trace de vos images anciennes qui ne seront pas affichées.
Il est en outre recommandé (optionnel) de signaler ces changements aux moteurs de recherche. Si vos images ont été indexées et ne sont pas bloquées par le robots.txt, la redirection des images peut se faire directement dans le .htaccess :
# Redirection des anciennes images links RedirectMatch 301 ^/wp-content/uploads/(.*)$ http://docu.lashon.fr$1
Notez que si vous avez protégé vos images contre le hotlinking et empêché leur indexation, cela devient moins important… mais à vous de choisir.
Autre méthode
Vous pouvez décider de ne placer AUCUN define pour définir le dossier uploads dans functions.php ou wp-config.php.
Créez simplement un répertoire docu à la racine de votre blog.
Remplissez dans les Médias du tableau de bord : docu sur la première ligne, l’url du sous-domaine sur la deuxième ligne.
Dans la console de votre hébergeur, cliquez sur votre sous-domaine docu.lashon.fr, modifiez les DNS, et créez un CNAME pointant vers le répertoire docu. Cette méthode varie selon l’hébergeur, que ce soit mutualisé ou serveur privé/virtuel. Pour un virtuel ou dédié, un wildcard suffira.
Conclusion
On m’a demandé si cette méthode était efficace avec un cache. Sans hésitation, je réponds que oui. Un cache, qu’il soit géré manuellement ou par un plugin, contribue à l’optimisation de ce qui existe, mais n’affecte pas les requêtes envoyées. Si vos images sont stockées ailleurs dans un sous-domaine, vous améliorez la distribution des requêtes pour l’affichage de votre blog, garantissant ainsi un gain de temps.
En somme, les avantages sont nombreux : optimisation du site, ce qui assure un blog plus rapide, contentant ainsi vos visiteurs, un référencement amélioré grâce à cette rapidité, ainsi qu’une meilleure sécurité contre les attaques automatisées.
Concernant ce dernier point, il aurait été judicieux de déplacer l’ensemble du répertoire wp-content, mais cela nécessiterait une autre manœuvre. Pour plus de détails, consultez le code ici ou l’explication dans le Codex (en anglais) là.
