Mahlzeit,
Meine Güte, das ist ja großartig.
ja danke, die Pizza war nicht übel. ;-)
Ginge es nicht so, dass man in das Array einfach die URLs schreibt, die umgeleitet werden sollen und dazu dann jeweils auch gleich die URL zu der umgeleitet werden soll? Das wäre für mich letztendlich einfacher zu handhaben später.
Könnte man, aber ich dachte, dass du generell auf die Suche umleiten wolltest, und aus dem Original-Artikel geeignete Suchbegriffe ableiten möchtest. Also dachte ich, die URL des Original-Artikels müsste eigentlich genug Information hergeben.
Obwohl, das hätte dann ja zur Folge, dass die Prüfung, ob die angefragte URL im Array $fehlt, keinen richtigen Sinn mehr macht. Weil ja auch die Ziel-URLs dann im Array stehen. Oder könnte man das irgendwie so lösen, dass jedes URL-Paar (angefragte URL / Ziel URL) in einer Zeile steht mit einem bestimmten Trennzeichen. Und die Prüfung erfolgt dann bei allen Zeilen nur bis zum Trennzeichen. Hmmmmmm :-)
Mir fallen zwei Mthoden ein.
Die primitive: Zwei getrennte Arrays. Nachteil: Man muss genau darauf achten, dass die beiden immer zueinander passen, man darf sich nicht verzählen. Zweitens reicht die schlichte Prüfung mit in_array() nicht mehr, denn man braucht für den Zugriff auf das Ziel-Array ja nicht nur die Aussage "ja, ist drin", sondern auch noch den Index. Man müsste das Array also "zu Fuß" durchackern und den Index selbst mitzählen.
Die elegantere: Ein assoziatives Array - also eines, bei dem die Einträge nicht durch einen Index adressiert werden, sondern durch einen alphanumerischen Schlüssel. Dann könnte man die Original-URL als Schlüsselnamen nehmen, und die Ziel-URL als Wert. Etwa so ...
<?php
$fehlt = array
( '/shop/abteilung/superprodukt.html' => '/shop/abteilung/neuheit.html',
'/shop/abteilung/top-angebot.html' => '/shop/abteilung/S2000XL.html',
'/shop/abteilung/knueller.html' => '/suche'
);
if (isset($fehlt[$_SERVER['REQUEST_URI']])
{
header('Location: http://example.net' . $fehlt[$_SERVER['REQUEST_URI']]);
exit;
}
Noch was anderes: Wie groß darf denn so ein Array werden?
Mir ist nicht bekannt, dass es da eine feste Grenze gibt. Die ergibt sich wohl eher indirekt aus dem Speicher, der einem Script zur Verfügung steht, und das sind in der Regel einige MB.
Ich frage, weil da ja letztendlich über 2000 URLs rein sollen.
Okay. Und auch die Performance ist hier nicht mehr so entscheidend, weil dieses Script ja dann nur relativ selten aufgerufen wird.
So long,
Martin