# $_SERVER['REQUEST_URI'] zerlegen



## Sascha1976 (16. November 2007)

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

```
## 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


----------



## KlamseN (16. November 2007)

Hmm?! Aber du willst schon immer den 4. Unterordner haben, oder verstehe ich dass falsch


----------



## Raven280438 (16. November 2007)

Ich würde es mit 

```
$array = explode("/",$_SERVER['REQUEST_URI']);
```
machen.

Und dann vielleicht ne Schleife, um das Element zu finden, dass du suchst

```
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


----------



## KlamseN (16. November 2007)

Richtig, nur weiß ich nicht, ob es IMMER der 4. Unterordner ist, denn: 



Sascha1976 hat gesagt.:


> 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.


----------



## Sascha1976 (16. November 2007)

KlamseN hat gesagt.:


> Hmm?! Aber du willst schon immer den 4. Unterordner haben, oder verstehe ich dass falsch


Nein, es können mal 3 ordner sein, mal 6 ordner sein oder auch mal nur einer.

Ich brauche halt eine Lösung, wie ich an den letzten Ordner immer komme.

Gruß
Sascha


----------



## mAu (16. November 2007)

```
$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];
}
```


----------



## maeTimmae (16. November 2007)

```
$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


----------



## KlamseN (16. November 2007)

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


----------



## Gumbo (16. November 2007)

Am besten zerlegst du den Pfad in die einzelnen Segmente. Auf diese kannst du dann nach Belieben zugreifen:
	
	
	



```
$segments = explode('/', preg_replace('@^/|/[^/+]*\.[^/+]*$@', '', $string));
// filtert leere Segmente "/foo/bar//index.html"
$segments = array_filter($segments, create_function('$val', 'return $val!=="";'));
```


----------

