Permalinks in WordPress 2.2 reparieren
Gestern Abend, kurz vor Mitternacht: „So, jetzt kurz noch das WordPress-2.2-Update aufspielen und ab in den Feierabend.“ … Oder auch nicht!
Ich finde es ja klasse, dass WordPress so rasant weiterentwickelt wird. Dumm nur, wenn man ein Update aufspielt und sich dabei herausstellt, dass man soeben massenweise Double Content produziert hat und somit zum Google-Abschuss freigegeben wurde. Urgs… Was nun?
Die Sache betrifft alle WordPress-Nutzer, welche für ihre Blog-Einträge Permalinks verwenden, die auf .html enden:
Leider hat sich nach dem 2.2-Update herausgestellt, dass die WordPress-Entwickler mit dem jüngsten Update eine Permalink-Veränderung eingeführt haben. Bei mir hatte diese Änderung zur Folge, dass nach dem Update fast kein einziger Link mehr dorthin zeigte, wo er früher einmal hingezeigt hat… So stand ich vor der Wahl, sämtliche Blog-Adressen zu ändern, indem ich statt .html-Seiten ab sofort einen „Trailing Slash“ verwende („/“ statt „.html“) oder den Trailing Slash von sämtlichen anderen Seiten entferne. Schöner Mist! Massenweise Redirects wollte ich natürlich nicht haben. Um eine Nachtschicht zu vermeiden, habe ich erst einmal zur .htaccess-Datei gegriffen:
RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [L,R=301]
Dieser Eintrag sorgte schon eimal dafür, dass sämtliche Links, die plötzlich keinen „Trailing Slash“ mehr hatten, auf das ursprüngliche Linkziel weitergeleitet wurden. Nicht schön aber zwingend notwendig.
Heute habe ich mir nun etwas Zeit genommen, das neue WordPress 2.2 unter die Lupe zu nehmen und bin dem Übel glücklicherweise auf die Spur gekommen. Um die alten Permalinks wieder herzustellen, sind zwei Änderungen in einer Datei namens „link-template.php“ erforderlich. Diese liegt im Ordner „wp-includes„:
1. Korrektur der Funktion „function user_trailingslashit“:
Diese ist zu ersetzen mit:
function user_trailingslashit($string, $type_of_url = '') {
global $wp_rewrite;
$string = trailingslashit($string);
// Note that $type_of_url can be one of following:
// single, single_trackback, single_feed, single_paged, feed, category, page,
// year, month, day, paged
$string = apply_filters('user_trailingslashit', $string, $type_of_url);
return $string;
// Anmerkung: Unsere .html-Seiten sind davon nicht betroffen!
}
2. Korrektur der Rewrite Rules für Blog-Einträge:
Außerdem muss die Zeile:
// $permalink = user_trailingslashit($permalink, 'single');
auskommentiert werden. Ansonsten würde aus .html .html/ werden, was wir natürlich nicht wollen.
Wer diese drei Ersetzungen (1x .htaccess, 2x link-template.php) hinter sich hat, verfügt wieder über seine alten Permalink-Strukturen. Nun kann man schadlos weitermachen – mit WordPress 2.2 vermutlich besser als jemals zuvor. 😉
Falls jemand keine Lust hat, seine Permalinks selbst zu korrigieren – hier gibt`s die passende Datei zum Download, natürlich kostenlos aber auf eigene Gefahr. Einfach in den Ordner „wp-includes“ kopieren und weitermachen… Dann stimmen die eigenen Links wieder. Um fehlerhafte Fremdverlinkungen zu vermeiden, würde ich die .htaccess-Ergänzung aber zusätzlich vornehmen. Ein „Permalink-Plugin“ braucht man dann übrigens nicht mehr…
Permalinks in WordPress 2.2 reparieren
Benutzerinformation und Links:
- Autor: fob (Montag, - 21. Mai 2007 - 18:37 Uhr)
- Blog-Ablage: Blogs und Blogging, Internet, Suchmaschinenoptimierung, Web-Entwicklung, Wordpress
- Stichwortsuche /
Super, danke für deine Mühe. Hab gerade ein Blog geupdated und dachte es hackt…
Kleiner Tipp noch, rankst bei Google ja ganz gut für das Problem hier, aber leider mit deinem Feed, vielleicht das mal per robots.txt sperren.
Huch? Das Permalink-Problem dürfte eigentlich noch gar nicht gerankt sein, weil Google diese Seite noch nicht eingelesen hat. Aber danke für den Hinweis. Ich habe in WordPress 2.2 noch keine Feed-Weiche eingebaut. Werde ich demnächst mal nachholen…
Besten Dank, genau wonach ich gesucht hatte
Super, das ist genau die Lösung, die noch gefehlt hat, um endlich auf WP2.2 umzusteigen. Ich dachte zunächst, mich trifft der Schlag. Ausserdem war ich etwas traurig, dass sich im WP-Forum kaum einer für dieses Problem interessiert hat (Zitat: wieso? Die Seiten werden doch angezeigt…).
Vielen Dank 🙂
Gern. Die Permalinks bekommt man schnell wieder flott. Abgesehen von den Permalinks gibt es allerdings noch das Problem, dass man in WordPress 2.2 keine Seiten (Pages) taggen kann, Dieses Problem scheint nun wirklich gar keinen zu interessieren. Ein unangenehmer Bug
, für den ich leider bis heute keine Lösung finden konnte.[…] [1] WordPress 2.2 DE-Edition [2] Joomla! Probleme 1.0.12 und openSEF [3] Permalinks in WordPress 2.2 reparieren […]
Das Permalink-Problem mit den fehlenden Slashes am Ende hat mich auch gestört, da ich in meinen Blogs eine Permalink-Struktur mit Dateiendung verwende (*.html).
Da ich nicht die WordPress-Core-Dateien ändern wollte, habe ich ein Mini-Plugin geschrieben:
https://www.fastagent.de/res/download/smart-trailing-slash.zip
Es ist ein Filter, der sich in die Funktion user_trailingslashit reinhängt und an jeden Permalink einen Slash anhängt, es sei denn, der Link endet auf .html oder anderen Dateierweiterungen.
Einfach entpacken, hochladen und sich freuen 🙂
Super! Ich dachte schon, ich müsste für`s nächste WordPress-Update selbst ein Plugin schreiben. 😉
Super sache, die Erklärung mit der geänderten Permalink-Struktur. Haben wir eben korrigiert aufgrund dieses Hinweis.
Das Plugin ist eine tolle Lösung. Bei einem Projekt benötige ich jetzt aber, dass bei statischen Seiten die Endung .html angehängt wird. Also weder domain.de/static-page noch domain.de/static-page/ sondern domain.de/static-page.html – weiß hier jemand eine Lösung?
@Frank:
Exakt um die Lösung Deines Problems ging es eigentlich in diesem Beitrag – und auch bei der Plugin-Entwicklung von Peter Claus Lamprecht (Kommentar Nr. 7). 😉
Besten Dank, genau wonach ich gesucht hatte
The chain is no stronger than its weakest link
da stolpere ich zufällig über diesen Tipp, den ich vor ner Weile nötig gehabt hätte.
Egal – hab’s auch selbst geschafft 😉
Diese Probleme haben sich ja zum Glück seit einer Weile erledigt, aber solche Permalink-Redirections kann man ja auch für eine Menge anderer sinistrer Zwecke einsetzen.
Leider ein Irrtum: Wenn man .html-URLs verwendet, haben sich die Permalinkprobleme immer noch nicht erledigt. Glücklicherweise funktioniert das Smart-Trailing-Slash-Plugin von Peter Claus Lamprecht (s.o., #7) aber nach wie vor. Es braucht also niemand mehr im Code zu fummeln, um die Permalinks nach jedem WordPress-Update erneut zu reparieren. 😉