http://www.xxxxxxxx.de/hamburg/kanzlei/
Eine weitere, wenig beachtete Möglichkeit besteht darin mit
ErrorDocument 404 /index.php
in der Serverkonfiguration (oft: .htaccess) auf die index.php verweisen und dann $_SERVER['REQUEST_URI']
mit explode()
zu zerlegen:
Vorliegend würde ein Aufruf von http://www.xxxxxxxx.de/hamburg/kanzlei/ dazu führen, dass in $_SERVER['REQUEST_URI']
dann '/hamburg/kanzlei/' steht.
Diesen also etwa wie folgt behandeln:
$str = trim($_SERVER['REQUEST_URI'], '/');
$str = preg_replace( '#//+#' , '/' , $str );
behandeln. Das Ergebnis wäre 'hamburg/kanzlei'.
Dann explode:
$ar = explode('/', $str);
Tja. Und dann noch etwas wie:
if ( 1 < count( $ar ) ) {
$item = array_pop( $ar );
$arKategorien = $ar;
require_once( $_SERVER['DOCUMENT_ROOT'] . '/lib/getDocument.php' );
getDocument($item, $arKategorien);
} else {
$arKategorien = false;
$item = $ar[0];
require_once( $_SERVER['DOCUMENT_ROOT'] . '/lib/getDocument.php' );
getDocument($item, $arKategorien);
}
lib/getDocument.php zum Erzeugen der Webseite bzw. der Suche nach dem Dokument enthalten.
Lauffähiges Testskript mit Berücksichtigung der alten Adressierung:
<?php
$_SERVER['REQUEST_URI'] = '/München/Kanzlei//Anwälte/Andreas+Mustermann';
ob_start();
$str = trim($_SERVER['REQUEST_URI'], '/');
$str = preg_replace( '#//+#' , '/' , $str );
$ar = explode('/', $str);
if (! isset($_GET['page']) ) {
if ( 1 < count( $ar ) ) {
$item = array_pop( $ar );
$arKategorien = $ar;
getDocument($item, $arKategorien);
} else {
$arKategorien = false;
$item = $ar[0];
getDocument($item, $arKategorien);
}
} else {
header( 'Status: 301 Document moved' );
header( 'Location: /' . rawurlencode( $_GET['page'] ) );
echo 'Location: /' . rawurlencode( $_GET['page'] ) , "\n";
}
exit;
function getDocument( $item , $arKategorien ) {
header( 'Content-Type: text/plain; charset=utf-8' );
echo 'Item: "' . urldecode( $item ) . '"', "\n";
echo 'Kategorien: '; print_r( $arKategorien );
echo "\n";
}