Zur Navigation

Weiterleitungen auf andere Parameter-Werte?

1 Markus V. (Gast)

Hallo Jörg,

bei der Suche nach einer Lösung für mein Problem bin ich auf dein tolles Forum gestoßen.

Momentan hänge ich an einem Problem fest: beim Umzug meiner Seite nach Wordpress konnte ich zwar die meisten Weiterleitungen korrekt meistern, an einer Sache hänge ich aber fest.

Ein Link
http://vampster.com/artikel/show/28709_amorphis-news.html

Soll auf die neue Seite
http://vampster.com/?p=66896

verwiesen werden.

Es sind tausende Artikel, die das betrifft - beim Import in Wordpress haben sich ja alle Artikel-IDs geändert.

Eine Tabelle mit den korrekten Verweisen von der alten Artikel-ID zum neuen Artikel habe ich beim Import in der Datenbank angelegt.

Im Ursprungs Link ist alles nach /show/ variabel. "Zahl_" ist mein Erkennungsmerkmal für die Artikelzuordnung.

Wie drösele ich den alten Link so auf, dass ich auf die neue ID verweisen kann? Egal welche ID ankommt und egal, was nach der Artikel-ID im Link steht?

Den einfachen Fall konnte ich bereits lösen: vampster.com/artikel.php?id=28709 auf vampster.com/?p=66896

Mit einem einfachen $artikelid = $_GET["id"]; und einem SELECT in der entsprechenden Tabelle sowie der Weiterleitung auf den neuen Artikel-Wert. Nur weiß ich nicht, wie ich mit der langen URL ans Ziel komme.

Kannst du mir helfen?

Herzlichen Dank vorab und viele Grüße
Markus

25.02.2017 13:19

2 Jörg

Mithilfe von preg_match() könntest du aus dem Request Uri die Zahl herausholen:

if (! empty($_GET["id"]) && is_numeric($_GET["id"])) {
    $artikelid = $_GET["id"];
} elseif (preg_match('~/artikel/show/([0-9]+)_~', $_SERVER['REQUEST_URI'], $matches) {
    $artikelid = $matches[1];
}

25.02.2017 13:47 | geändert: 25.02.2017 13:50

3 Markus V. (Gast)

Danke für deine Antwort. Das Teste ich gerne mal. Nur was mir nicht klar ist: Wie heißt die Datei, in die ich den preg_match einbaue und die die ganzen unterschiedlichen URLs bearbeitet?

25.02.2017 13:55

4 Jörg

In welcher Datei hast du denn die Weiterleitung bislang drin:

Den einfachen Fall konnte ich bereits lösen: vampster.com/artikel.php?id=28709 auf vampster.com/?p=66896

Mit einem einfachen $artikelid = $_GET["id"]; und einem SELECT in der entsprechenden Tabelle sowie der Weiterleitung auf den neuen Artikel-Wert.

Diese von dir genannte Zeile:

$artikelid = $_GET["id"];

... änderst du einfach in den Code, den ich gepostet habe :)

25.02.2017 14:11

5 Markus V. (Gast)

In der Datei "artikel.php" probiere ich es gleich aus - das funktioniert dort auch bestimmt. Das Problem sind aber alte, "sprechende" URLs, die in Google erfasst sind. Und die nun irgendwo (genau das ist, was ich noch nicht verstehe) aufschlagen und an die ich noch nicht "ran" komme...

Auf die Schnelle habe ich mal eine Google-Abfrage gemacht, die das Problem vielleicht besser zeigt: https://www.google.de/search?q=site:vampster.com+_.html

Mit dieser Anfrage sehe ich 138 Artikel, die gerade ins Leere laufen. Mit der artikel.php kann ich die ja nicht weiterleiten, da sie dort gar nicht ankommen..?

Vom Verständnis her müsste ich diese Anfragen, die in artikel/show/ aufschlagen, per .htaccess an die richtige Stelle weiterleiten, nur habe ich ja das Problem des neuen Artikel-Parameters.

Oder hab ich einfach nur einen riesengroßen Denkfehler...? :)

25.02.2017 14:23

6 Jörg

Du kannst auch die URLs schon in der .htaccess Datei abfangen und auf eine redirect.php rewriten, z.B. so, wenn du die .htaccess Datei von WordPress nutzt:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} id=([0-9]+)
RewriteRule . /redirect.php?id=%1 [L]

RewriteRule  ^artikel/show/([0-9]+)_ /redirect.php?id=$1 [L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

In der redirect.php kannst du dann in beiden Fällen $_GET['id'] auswerten. Da das eine Standalone-Datei ist, musst du nur die Datenbankverbindung für die SELECT-Abfrage selbst herstellen

25.02.2017 14:36 | geändert: 25.02.2017 14:40

7 Markus V. (Gast)

Vielen Dank!
Ich habe es getestet, irgendwo scheint noch ein Fehler zu sein.
In der .htaccess der Wordpress Installation haben die eingefügten Zeilen keine Wirkung. Ich habe sie darauf hin in eine .htaccess im Verzeichnis artikel /show/ eingefügt, mit einer gewünschten Weiterleitung auf vampster.com/artikel.php - dort gibt es diese artikel.php ja schon, die bereits richtig funktioniert. Leider klappt es noch nicht...?

RewriteEngine On
RewriteBase /

#Eintreffende Links auf artikel/show/ abfangen und weiterleiten
RewriteCond %{QUERY_STRING} id=([0-9]+)
RewriteRule . http://vampster.com/artikel.php?id=%1 [L]
RewriteRule ^artikel/show/([0-9]+)_ http://vampster.com/artikel.php?id=$1 [L]

25.02.2017 15:59

8 Jörg

Ich habe sie darauf hin in eine .htaccess im Verzeichnis artikel /show/ eingefügt, mit einer gewünschten Weiterleitung auf vampster.com/artikel.php - dort gibt es diese artikel.php ja schon, die bereits richtig funktioniert. Leider klappt es noch nicht...?

Das wird auch nur funktionieren für die URLs, deren Pfad mit /artikel/show/ beginnt, also für die zweite Weiterleitungsregel. Ich würde dabei den Verzeichnis-Pfad der .htaccess Datei in der RewriteBase angeben und das Muster in der Rule entsprechen kürzen:

RewriteEngine On
RewriteBase /artikel/show/

#Eintreffende Links auf artikel/show/ abfangen und weiterleiten
RewriteRule ^([0-9]+)_ http://vampster.com/artikel.php?id=$1 [L,R=301]

Wenn du die vollständige Ziel-URL angibst, leitest du weiter, da würde ich noch ein Weiterleitungsflag R=301 angeben.

25.02.2017 16:13

9 Markus V. (Gast)

Genial, es geht! Herzlichen Dank für die tolle, schnelle Hilfe!

Eine kleine Spende per Paypal ist unterwegs :)

25.02.2017 16:53

10 Jörg

Freut mich und Danke für die Spende :)

25.02.2017 17:20

Beitrag schreiben (als Gast)





[BBCode-Hilfe]