Zo, daar ben ik even fijn in een FTP-client, het hosting-control-panel-dinges en in WordPress zelf een beetje aan het rommelen geweest. Netto resultaat: alle plaatjes die ik aan posts heb hangen (screenshots, foto's) staan nu niet langer in /wordpress/wp-content/uploads/.

Dat heeft drie voordelen en het is niet eens echt moeilijk; omdat ik zo'n toffe peer ben doe ik er nog een HOW TO bij ook. Niet dat die er niet al in ruime mate waren, maar goed.

De Voordelen

  • Mijn /wordpress/ directory wordt een stuk kleiner, en 'schoner'.
    Ik wil vaker backups maken van mijn WordPress setup, maar omdat de uploads op de standaardplek stonden, werd zo'n backup steeds groter.

  • Pagina's met plaatjes erin worden nu iets sneller geladen.
    Althans, in theorie dan. Dat zit zo: browsers kunnen meerdere verbindingen tegelijk maken (en dus meerdere bestanden tegelijk downloaden), maar het aantal verbindingen per server wordt meestal beperkt tot 4 of 8 ofzo. Met een brok HTML, een CSS-bestand en wat Javascript-rommel zit je daar zo aan. In de nieuwe situatie komen de plaatjes van media.doenietzomoeilijk.nl af, wat voor een browser als andere server geldt en dus zijn eigen beperking heeft. Oftewel: de plaatjes worden eerder opgehaald, in hun eigen groep van 4 of 8 verbindingen.

  • De plaatjes hebben nu een kortere URL.
    Vooral een esthetisch voordeel, eigenlijk. Het staat iets netter, dat wel, maar verder maakt het weinig uit.

De Nadelen

Geen, natuurlijk!

Nou, da's niet helemaal waar. Omdat er een nieuwe hostname aan te pas komt -- in mijn geval images.doenietzomoeilijk.nl versus doenietzomoeilijk.nl -- kost het opbouwen van de pagina één DNS request meer. Dat is maar een heel klein nadeeltje, want een DNS request gaat over het algemeen snel genoeg om er eigenlijk niks van te merken, en bovendien wordt het nog gecached ook.

Wat mij betreft mag dat de pret niet drukken.

De HowTo

Eigenlijk is het belachelijk simpel, vooral als je dit doet voordat je al een hoop uploads hebt gedaan. De enige voorwaarde is dat je hoster subdomeinen ondersteunt. Doen ze dat allemaal? Nee, natuurlijk niet, dat zou te makkelijk zijn... Mocht je twijfelen of jouw hoster het ondersteunt: vraag het je hoster. Er van uitgaand dat die "ja, dat ondersteunen we!" roept -- of iets van die strekking -- maak je een subdomein aan. Ik heb voor "media" gekozen, maar dat staat je verder natuurlijk helemaal vrij.

Vervolgens moet je even uitzoeken waar bij jouw hoster de webroot van die nieuwe host terecht komt. In mijn geval gebruikt de hoster DirectAdmin, en die zet subdomeinen in de public_html. Dat betekent dat media.doenietzomoeilijk.nl ook te bereiken is onder doenietzomoeilijk.nl/media, maar belangrijker, ik hoef niet naar directories te zoeken...

Overigens, als je geen subdomein kunt gebruiken, hou je altijd nog twee van de drie voordelen over: kortere URLs en een schonere WordPress-directory. Je maakt dan gewoon een directory media (of iets naar keuze) aan in de webroot, en je overal waar ik media.doenietzomoeilijk.nl gebruik, blijf je gewoon je bestaande domeinnaam gebruiken.

Zorg er in beide gevallen voor, dat de webserver in die directories kan schrijven.

[caption id="attachment_751" align="alignright" width="156" caption="Klik voor groot"][/caption]

Gewapend met die kennis ga je in het WordPress backend naar Instellingen > Overige Opties. Zie voor een voorbeeld het screenshot hiernaast.

Daar ga je opgeven in welke map de uploads worden opgeslagen ten opzichte van de WordPress directory; dit is een pad, geen URL. In mijn geval staat wordpress zelf in /wordpress/ en de nieuwe map is /media/; één niveau omhoog (../), en dan naar media. Let op: daar moet dus geen slash achter.

Het volgende veld is wat er voor de uploads moet komen te staan om ze vanaf die locatie via de webserver aan te roepen. Dit is dus wél een URL, in mijn geval http://media.doenietzomoeilijk.nl, wederom zonder een slash aan het eind.

Of je verder je uploads wilt laten opsplitsen in mappen per jaar en maand is een kwestie van smaak; als je van plan bent geregeld dingen te uploaden, voorkomt het een overvolle map waar je niets meer in terug kunt vinden, en het wordt lastiger om incrementele backups te maken. Ik heb dat dus aan staan.

Dat van die "bijwerktijden" kun je negeren, dat heeft niets met uploads te maken. Hup, wijzigingen opslaan, klaar.

Je bent nu klaar om een upload te testen. Werkt dat? Mooi. Werkt dat niet? Waarschijnlijk is dat een kwestie van rechten -- WordPress geeft dat wel aan in een eventuele foutmelding. Zorg dat de nieuwe upload-map door de webserver beschreven kan worden; je doet dat via een FTP-client of via je hosting control panel. Hoe het precies in zijn werk gaat hangt natuurlijk af van welk programma of welk panel je gebruikt; vraag het in geval van twijfel na bij je hoster.

Als je al een zooi uploads had...

Als je nog niets had geupload via WordPress, was je bij de vorige stap al klaar. Ik had echter al een fikse zooi plaatjes geupload, dus die moesten nog verplaatst worden. Ook moesten alle verwijzingen in posts worden aangepast.

Dat eerste was een kwestie van de bestanden naar de nieuwe directory slepen in mijn FTP-client. Duurt even, maar echt moeilijk is het niet.

Die verwijzingen aanpassen kan -- als je weinig uploads hebt -- met de hand, maar als het er wat meer zijn, zoals in mijn geval, dan wordt dat erg bewerkelijk. In zo'n geval zou het handig zijn als WordPress een zoek-en-vervang functie had.

Gelukkig geldt voor de meeste dingen die niet standaard in WordPress zitten: there's a plugin for that; Zoek-en-vervang is geen uitzondering. De beschrijving van de Search Regex plugin meldt:

The primary reason for the plugin was to aid in relocating directories. It's a real pain to manually go through every post and change image directory names. With this plugin all that was required was a simple search and replace pattern, and the job was finished in a few seconds.

Klinkt perfect, niet waar? Installeren, activeren, en onder Extra > Search Regex kun je gaan zoeken naar wp-content/uploads. Hoe je precies zoekt hangt een klein beetje af van hoe je WordPress geïnstalleerd hebt. In mijn geval stonden alle uploads onder /wordpress/wp-content/uploads; als je een plaatje invoegt bij het schrijven van de post plakt WordPress daar zelf nog de domeinnaam voor. Gelukkig kun je zoeken met regular expressions.

In mijn geval tikte ik bij Search pattern:

|(http://doenietzomoeilijk.nl)?/wordpress/wp-content/uploads|

...wat resulteert in alle posts waar /wordpress/wp-content/uploads in voorkomt, eventueel met http://doenietzomoeilijk.nl ervoor. Dat was nodig omdat ik soms met de hand een plaatje toevoegde en dan de domeinnaam eraf liet. Die pipes eromheen zijn nodig, ja.

Het Replace pattern werd http://media.doenietzomoeilijk.nl, wat je in jouw geval natuurlijk even moet aanpassen naar je eigen situatie. Controleer voordat je de wijziging daadwerkelijk doorvoert nog even met Replace » of je echt alleen vervangt wat nodig is, zorg dat je een recente backup van je database hebt liggen, en klik op Replace & Save ». Een paar tellen later is alles bijgewerkt. Klaar!

Controleer een paar bestaande posts op de aanwezigheid van verwachte plaatjes, en Bob is je spreekwoordelijke oom.

Afsluitend

Het is als je het zo doorleest misschien een flinke lap tekst, maar uiteindelijk hoeft de hele verhuizing maar een paar minuutjes te duren. Daarna heb je er geen omkijken meer naar: alle nieuwe uploads komen automatisch op de nieuwe locatie terecht.

En in mijn geval werd mijn WordPress-directory bijna 9MB en 136 bestanden lichter.

Een volgende stap is het "afsplitsen" van andere bestanden; denk aan CSS en Javascript. Dat is echter een andere HOW TO voor een andere dag.