Zitat von sdvs
Beitrag anzeigen
![Wink](https://www.php-resource.de/forum/core/images/smilies/wink.gif)
Hab deine Problembeschreibung nicht komplett gelesen (oder nicht verinnerlicht).
Also zusammengefasst:
Seite ohne parameter 'Startseite'
Seite mit parameter 'Seite' und richtigem String Content laden
Seite mit parameter 'Seite' und falschem String 'pagenotfound'
Seite mit falschem paramter zb seiteeeee und richtigem string 'pagenotfound'
Seite mit falschem Parameter und falschem String 'pagenotfound'
Seite ohne parameter 'Startseite'
Seite mit parameter 'Seite' und richtigem String Content laden
Seite mit parameter 'Seite' und falschem String 'pagenotfound'
Seite mit falschem paramter zb seiteeeee und richtigem string 'pagenotfound'
Seite mit falschem Parameter und falschem String 'pagenotfound'
PHP-Code:
/// hole Seitenname holen oder führe Redirect aus
/// return: STR
function page_switch(
$new = 'seite', // der aktuelle GET-parameter
$old = 'site', // der veraltete GET-parameter
$default = 'pagenotfound' // voreingestellter Rückgabewert,
// wenn alles schiefgeht
) {
$page = parameter_is_valid($new);
if (is_string($page)) {
// neue Adressierungsart
return $page;
}
$page = parameter_is_valid($old);
if (is_string($page)) {
// alte Adressierungsart
// return $page;
page_redirect($old, $new);
// Script endet hier
}
// keine der beiden Arten
return $default;
}
/// prüfe GET-Parameter-Wert auf Gültigkeit
/// return: STR GET parameter value oder FALSE
function parameter_is_valid(
$param
) {
// hier wäre eine Prüfung gegen eine Liste erlaubter Werte sinnvoller
// Bsp.:
//return in_array($param, $allowed_params, TRUE) ? $param : FALSE;
if (
isset($_GET[$param]) && // Parameter existiert
isset($_GET[$param][0]) // und ist nicht leer
) {
return $_GET[$param];
}
return FALSE;
}
/// sende HTTP-Redirect header (und beende Script)
/// return -
function page_redirect(
$param_old,
$param_new
) {
// e.g. ?site= | &site=
$pcre_old = '/([?&])' . preg_quote($param_old, '/') . '(=)/';
// ?seite= | &seite=
$pcre_new = '$1' . preg_quote($param_new, '/') . '$2';
header('HTTP/1.0*301 Moved Permanently');
// Bestandteile der Ziel-URL zusammenkleben
header(sprintf(
'Location: http://%s%s',
// Zielserver
isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'],
// Ziel-Pfad
preg_replace($pcre_old, $pcre_new, $_SERVER['REQUEST_URI'])
));
exit(); // Script beenden
//return NULL;
}
// Anwendung
$page = page_switch('seite', 'site', 'Startseite');
Wenn 'site' als GET-Parameter übergeben wurde, wird ein 301-Redirect zur richtigen URL ausgelöst und das Script beendet.
Wenn weder 'seite' noch 'site' übergeben wurden oder der Wert unbrauchbar (momentan nur ein Leerstring) ist, steht in $page der Voreingestellte Wert, hier 'Startseite'. Prinzipiell kannst du das auch auf eine echte 'pagenotfound'-Aktion umstellen. Ein HTTP-Statuscode 404 wäre hier angebracht. Man könnte das wie den Redirect in eine eigene Funktion packen.
Den Redirect kannst du als Ersatz für dein 'pagenotfound' nehmen. Google sollte das mitbekommen und die falschen Ursprungs-URLs ('site') mit der Zeit aus dem Index nehmen.
Kommentar