Moin!
Hallo Jörg
<?php ##404.php ## ggf. includiert oder sonstige Quelle (DB, ini-File, csv,...) $v['foo']='/produkte/abverkauf/foo.html'; $v['bar']='/produkte/abverkauf/bar.html'; # angenommene URI (Test in Konsole) if ( empty($_SERVER['REQUEST_URI']) ) { ##Tests_ #$_SERVER['REQUEST_URI']='/shop/abteilung/Ödipus1000+.html'; $_SERVER['REQUEST_URI']='/shop/Geschenke/foo.html'; $_SERVER['SERVER_NAME']='konsole.com'; $_SERVER['HTTPS']='on'; $_SERVER['fake']='yes'; } $pattern = '/\/([^\/]*)\.html$/'; $dummy=preg_match ( $pattern , $_SERVER['REQUEST_URI'], $matches ); print_r($matches); if ($_SERVER['HTTPS'] && 'off' != $_SERVER['HTTPS']) { $proto='https://'; } else { $proto='http://'; } if ( ! empty($v[$matches[1]]) ) { if ( ! empty($_SERVER['fake']) ) { echo 'Location: ' . $proto . $_SERVER['SERVER_NAME'] . $v[$matches[1]] , "\n"; } else { header( 'Location: ' . $proto . $_SERVER['SERVER_NAME'] . $v[$matches[1]] ); } } else { if ( ! empty($_SERVER['fake']) ) { echo 'Location: ' . $proto . $_SERVER['SERVER_NAME'] . '/suche.php?q=' . urlencode($matches[1]), "\n"; } else { $_GET['q']=$matches[1]; header('HTTP/1.0 404 Not Found'); include_once( $_SERVER['DOCUMENT_ROOT'] . '/suche.php?' ); } }
Dein Script sieht ja wesentlich aufwendiger aus als das vom Martin.
Ok. Ohne die Extras für den Test auf der Konsole:
<?php
##404.php
## Verschobene:
$v['foo'] = '/produkte/abverkauf/foo.html';
$v['bar'] = '/produkte/abverkauf/bar.html';
## Programm:
$pattern = '/\/([^\/]*)\.html$/';
$dummy = preg_match ( $pattern , $_SERVER['REQUEST_URI'], $matches );
if ( ! empty($v[$matches[1]]) ) {
if ( $_SERVER['HTTPS'] && 'off' != $_SERVER['HTTPS'] ) {
$protoAndHost='https://' . $_SERVER['SERVER_NAME'];
} else {
$protoAndHost='http://' . $_SERVER['SERVER_NAME'];
}
header( 'Location: ' . $protoAndHost . $v[$matches[1]] );
} else {
$_GET['q'] = $matches[1];
header('HTTP/1.0 404 Not Found');
include_once( $_SERVER['DOCUMENT_ROOT'] . '/suche.php' );
}
Untersucht die URL, gleicht gegen bekannte ($v) Verschiebungen ab, ermittelt, wenn kein Treffer darin den Suchbegriff, sendet also den Header und inkludiert die Suche gleich so, als wäre der Begriff eingegeben worden.
Der 404er Header wird gebraucht, damit Google erfährt, dass "'Schafskäse mit Löchern' wurde nicht gefunden" besser nicht in den Suchergebnissen erscheint - sonst legt Dir ein Witzbold ein Ei mit Links zu 2.000.000 Produkten, die Du nicht hast.
Jörg Reinholz