Moin!
Ich würde das etwas anders machen. Folgendes als 404er-Error-Seite hinterlegen:
ErrorDocument 404 /404.php
und dann
<?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?' );
}
}
Für eine reale Webseite natürlich die ganzen Konsolen-Fakes 'herausoperieren'.
Jörg Reinholz