Coding | SQL | WordPress

WordPress: blogs.dir und Umweg über ms-files loswerden

ancient 1799673 1920

Wer seine Multisite mit einer früheren Version als WordPress 3.5 aufsetzte, bei dem legen Subsites ihre Dateien unter ab. Im Quelltext sieht es hingegen so aus, als wären die Dateien unter abgelegt. Eine .htaccess-Regel sorgt für Handling der Links über den Aufruf des Filehandlers ms-files.php.

Bei mit WordPress 3.5 neu aufgesetzten Multisites gibt es diesen Umweg nicht mehr. Die Dateien werden von da geholt wo sie tatsächlich liegen, und sind bei Subsites unter uploads/sites/siteid# zu finden, was ich als schlüssiger empfinde.

Die hier behandelte Umstellung des Dateiablageorts von Subsites unter WordPress-Multisites ist kein Erfordernis um die Funktionstüchtigkeit des Sitenetzwerks aufrecht zu erhalten. Ich habe sie nur vollzogen, weil es mich störte mit der alten Variante zu fahren, und ich einfach mal wissen wollte, was genau den Unterschied ausmacht.

Für die Umsetzung dieses Vorhabens sollte man SQL-vertraut und auch sonst technisch rund um WordPress so weit versiert sein, dass das Erfordernis eines Fallback auf den Ursprungszustand keine Probleme bereiten wird (also unbedingt vorher Datenbank sichern).

Und das musste ich dafür tun:

Dateien in neues Verzeichnis kopieren / übertragen

von wp-content/blogs.dir/siteid#/files
jeweils zu wp-content/sites/siteid# (kein “files” mehr)
Ich benutzte hierfür Fire-FTP – Cut and Paste (keine Kommandozeilenbefehle).

Die alten Links auf die Dateien in der Posts-Tabelle durch die neuen Datei-URLs ersetzen

SQL-Statement über PHPMyAdmin-Oberfläche:

update tableprefix_siteid#_posts set guid=replace(guid,'http://subdomain.blog.url/files','http://subdomain.blog.url/wp-content/uploads/sites/siteid#') WHERE guid like '%http://subdomain.blog.url/files%' update tableprefix_siteid#_posts set post_content=replace(post_content,'http://subdomain.blog.url/files','http://subdomain.blog.url/wp-content/uploads/sites/siteid#') WHERE post_content like '%http://subdomain.blog.url/files%'

Subsite-Optionen

Manuell über Datenbank oder die Seiteneinstellungen des Blogs:
Aus den Konfigurationstabellen jedes Blogs (nur) die Werte für upload_path, upload_url_path, und fileupload_url löschen. Für die fileupload_url musste ich an die Datenbank, weil ich sie in den Subsiteeinstellungen nicht vorfand.

Ohne diesen Schritt bleibt alles beim alten

In der Tabelle tableprefix_sidemeta die Einstellung ms_files_rewriting suchen und auf 0 setzen, sofern sie da ist (bei mir fehlte sie, was aber so viel bedeutete wie sie war an). Diese Option muss auf 0 gesetzt sein, daher wenn sie nicht vorhanden ist, einen SQL-Befehl über die PHPMyAdmin-Oberfläche abschicken:
INSERT INTO tableprefix_sitemeta (meta_id, site_id, meta_key, meta_value) VALUES (NULL, 1, ms_files_rewriting, 0);

Nachfolgende Rewrite Rule aus .htaccess entfernen

RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

Den Erfolg kann man gegebenenfalls unter anderem daran erkennen, dass der Umweg über ms-files.php zu den Dateilinks in der Netzwerk-Einrichtung unter “Füge folgendes zu deiner .htaccess Datei in /home/www/web323/html/ hinzu, ersetze andere WordPress Regeln:” nicht mehr enthalten ist. – Und natürlich daran, dass und wie die Dateien verlinkt sind.

Jetzt noch eine Warnung: Gelesenen Erfahrungsberichten zufolge ist das Unterfangen heikel und führt nicht in allen Fällen zum Erfolg, respektive erforderte es zusätzliche Maßnahmen.

Anleitung (en)

weiter schmökern

Schreibe einen Kommentar

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden.

Deine E-Mail-Adresse wird nicht veröffentlicht.