# Problem mit htaccess-Syntax



## DeluXe (25. November 2006)

Abend zusammen,

also irgendwie schein ich zu dumm zu sein, mir selber eine richtige RewriteRule zu basteln, denn mein Vorhaben ist _meiner Ansicht nach_ ein Klacks. 

Folgendes Beispiel:

```
http://domain.tld/dir1/dir2/dir3/?option1=bla&option2=blubb
```
soll in folgendes "umgewandelt" werden:

```
http://domain.tld/?option1=bla&option2=blubb&path=/dir1/dir2/dir3/
```

Also der Pfad hinter der Domain soll als Argument angehängt werden.

Ich hoffe mir kann da jemand unter die Arme greifen. 

Danke schon mal und Byebyez.


----------



## Gumbo (25. November 2006)

Wie sieht denn dein bisheriger Versuch aus?


----------



## DeluXe (25. November 2006)

Also ein bisschen weiter bin ich schon mal. 


```
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(.*)/?(.*)/$
RewriteRule ^(.*) /index.php?path=%1&%2  [L]
```

Das übergibt mir nun schon mal den Pfad richtig, nur fehlen nun die Argumente, welche in "%2" stehen sollten.
Ich hab das Gefühl, dass das Fragezeichen in der RewriteCond nicht ganz passt.


----------



## Gumbo (25. November 2006)

Das Fragezeichen ist bei regulären Audrücken ein Metazeichen (genauer gesagt ein Quantor) und besagt, dass das vorhergehende Zeichen beziehungsweise der vorhergehende Ausdruck ein oder keinmal vorkommen darf. In deinem Fall heißt das also, dass der Schrägstrich in dem angefragten URI ein oder keinmal vorkommen darf.

Ich würde wohl Folgendes verwenden:
	
	
	



```
RewriteCond   %{REQUEST_FILENAME}   !-d
RewriteCond   %{REQUEST_FILRNAME}   !-f
RewriteRule   .*   /index.php?path=%{REQUEST_URI}   [L,QSA]
```
Damit wird jede Anfrage abgefangen und geprüft, ob sie auf ein existierendes Verzeichnis oder eine existierende Datei abgebildet werden kann. Ist dies nicht der Fall, wird die Anfrage intern umgeschrieben und der angefragte URI als Query-String-Argument angehängt. Das „QSA“-Flag sorgt schließlich dafür, dass der ursprüngliche Query String ebenfalls angehängt wird („query string append“).


----------



## DeluXe (25. November 2006)

Ach nö, erst versuche ich eine halbe Ewigkeit eine Lösung zu finden, und nun, als ich deswegen einen Thread erstellt habe, finde ich sie.


```
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(.*)/$
RewriteRule ^(.*) /index.php?path=%1&%{QUERY_STRING}  [L]
```
Sollte doch so passen, oder? Zumindest funktioniert es. 

Danke dir trotzdem.

MfG - Del


----------



## DeluXe (25. November 2006)

Gumbo hat gesagt.:


> Das Fragezeichen ist bei regulären Audrücken ein Metazeichen (genauer gesagt ein Quantor) und besagt, dass das vorhergehende Zeichen beziehungsweise der vorhergehende Ausdruck ein oder keinmal vorkommen darf. In deinem Fall heißt das also, dass der Schrägstrich in dem angefragten URI ein oder keinmal vorkommen darf.


Jetzt wundert mich natürlich nichts mehr, klar dass das nicht funktionieren konnte.



Gumbo hat gesagt.:


> [...]ob sie auf ein existierendes Verzeichnis oder eine existierende Datei abgebildet werden kann[...]


Ob ein Ordner mit dem selben Namen existiert oder nicht ist in diesem Fall vollkommen irrelevant, da die Ordnerstruktur rein gar nichts mit den übergebenen Argumenten zu tun hat, somit kann ich das getrost draussen lassen. Gleiches gilt für Dateien.

Es gibt nur lediglich eine einzige Ausnahme (Für CSS-Dateien, Bilder, etc.).
Dieser Ordner kann mit all seinen Unterordnern komplett freigegeben werden, mal eben schauen wie das dann auszusehen hat, das war doch nur ein Einzeiler, nicht? 

Mal ganz nebenbei: Gibt es irgendwo mal eine ordentliche Erklärung dieser ganzen Anghängsel? Weil ich bei dir gerade das "QSA" stehen sehe.


----------



## Gumbo (26. November 2006)

DeluXe hat gesagt.:


> Ob ein Ordner mit dem selben Namen existiert oder nicht ist in diesem Fall vollkommen irrelevant, da die Ordnerstruktur rein gar nichts mit den übergebenen Argumenten zu tun hat, somit kann ich das getrost draussen lassen. Gleiches gilt für Dateien.


Das ist es nicht ganz, denn wird „/index.php“ angefragt, landet man ohne diese Prüfung in einer Endlosschleife.



DeluXe hat gesagt.:


> Gibt es irgendwo mal eine ordentliche Erklärung dieser ganzen Anghängsel?


In solchen Fällen verweise ich gerne auf das „mod_rewrite“-Handbuch.


----------



## DeluXe (26. November 2006)

Gumbo hat gesagt.:


> Das ist es nicht ganz, denn wird „/index.php“ angefragt, landet man ohne diese Prüfung in einer Endlosschleife.


Eine Endlosschleife war zwar nicht entstanden, jedoch war "path" logischer Weise leer, da kein / zu finden war. Was mir auch eben aufgefallen ist: Rufe ich "domain.tld/diese_datei_gibts_nich.php" auf, kommt ein 404er, also auch nicht unbedingt praktisch. 

Mit deiner Variante da oben klappt das da schon um Einiges besser.
Nun denn, ich knüpf mir nun mal das Manual vor, bis später. ^^


----------

