$_SERVER['REQUEST_URI'] zerlegen

Sascha1976

Mitglied
Hallo,
wie kann ich am besten $_SERVER['REQUEST_URI'] zerlegen?

Ich rufe folgenden Link auf und brauche nur den Rot markierten teil.

domain.de/Test/Test1/Test2/Test3/index.html

der Link kann aber auch wie folgt aufgerufen werden
domain.de/Test/Test1/Test2/Test3/
oder
domain.de/Test/Test1/Test2/Test3

Wenn ich jetzt mit $_SERVER['REQUEST_URI'] arbeite, bekomme ich ja folgende drei möglichkeiten angezeigt:
Test/Test1/Test2/Test3/index.html
Test/Test1/Test2/Test3/
/Test/Test1/Test2/Test3

Da ich das ganze für ein Verzeichnis benötige und mit Mod Rewrite arbeite, ist natürlich auch die anzahl der Verzeichnisse immer unterschiedlich.

Falls der Rewrite Code benötigt wird, der sieht so aus
Code:
   ## Category redirect
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-l
   RewriteRule ^(.*)$ index.php [QSA,L]

Danke schonmal im vorraus für eure Hilfe.

Gruß
Sascha
 
Ich würde es mit
PHP:
$array = explode("/",$_SERVER['REQUEST_URI']);
machen.

Und dann vielleicht ne Schleife, um das Element zu finden, dass du suchst
PHP:
for ($i=0;$i<count($array);$i++) {
  if ($array[$i] == "Test3")  {
    $ele = $i;
  }
}

$array[$ele] enthält dann den Teil den du suchst


Ich hoffe ich hab dein Problem richtig verstanden
 
Zuletzt bearbeitet:
PHP:
$split = explode('/', $url);

if(substr($split[count($split) - 1], 0, -5) != '.html')
{
    $dir = $split[count($split) - 1];
    $dir = substr($dir, 0, -1) == '/' ? substr($dir, 0, strlen($dir) - 1) : $dir;
}
else
{
    $dir = $split[count($split) - 2];
}
 
PHP:
$string = "/foo/bar/bla/index.html";
// $string = "/foo/bar/bla/";
// $string = "/foo/bar/bla";
preg_match("%/([^/]+)(?=/[^/\.]+\..+$|/$|$)%Uis", $string, $matches);
var_dump($matches);
Regex hat für die oben aufgeführten Strings funktioniert und liefert in $matches[1] das gesuchte Element :)
 
Ok, die Lösung ist möglich, allerdings bekommt er dann meines Erachtens nach Probleme bei .htm- oder .php- oder ...-Dateien. Ich weiß ja nicht in wie fern nur .html-Endungen vorhanden sind. Besser wäre es doch alle Dateiendungen abzufangen, evtl. mit ner RegEx?! Korrigiert mich, falls ich falsch liege...

EDIT: Ok, da kam mir jemand zuvor :)
 
Am besten zerlegst du den Pfad in die einzelnen Segmente. Auf diese kannst du dann nach Belieben zugreifen:
PHP:
$segments = explode('/', preg_replace('@^/|/[^/+]*\.[^/+]*$@', '', $string));
// filtert leere Segmente "/foo/bar//index.html"
$segments = array_filter($segments, create_function('$val', 'return $val!=="";'));
 
Zurück