# mod_rewrite: Endlosschleife für N-Variablen (URL in Ordnerstruktur)



## Bomber (27. Juli 2005)

Hi!

Ich habe ein Problem: Ich habe eine RegEx für die Rewrite-Mod des Apache und möchte sie für meine Bedürfnisse anpassen.

Die Form der Url soll folgende sein: http://localhost/cms/news/varname1/varwert1/varname2/varwert2 usw., die Anzahl der Variablen muss also variabel D) sein. Die htaccess Datei soll im Verzeichnis http://localhost/cms/ liegen und der Zugriff auf eben jenes Verzeichnis soll wie folgt umgesetzt werden: http://localhost/cms/index.php?page=news&varname1=varwert1&varname2=varwert2 usw..

Ergo: Die Variable page wird IMMER mit übergeben, allerdings soll sie nicht wie ein Teil der "variablen" Variablen behandelt, sondern automatisch als Variable "page" an die URL angehängt werden, sollten dann noch weitere Variablen-Paare kommen werden sie halt nach dem bekannten Muster hinten angehängt.

So das habe ich bis jetzt, eine Umwandlung von http://www.domain.tld/index/page/news/varname1/varwert1/ in http://www.domain.tld/index/index.php?page=news&varname1=varwert1, zumindest glaube ich, das es das ist 


```
RewriteEngine On
RewriteRule ^index/([^/]+)/([^/]+)(.*)$ /index$3?$1=$2 [QSA,N]
RewriteRule ^index/?$ /index.php [QSA,L]
```

Wichtig ist mir auch die Ordnerstruktur mit dem Ordner CMS, denn deren Prinzip ist mir bisher völlig schleierhaft geblieben. Bei den ersten Versuchen mit mod_rewrite landete ich Grundsätzlich im höchstgelegenen Ordner auf dem Server. Keine Ahnung wieso. 

Ich hoffe jemand kann sich meinen Problemen annehmen, auch wenn sie vielleicht nicht ganz einfach sind. Ich danke im vorraus schonmal für eure Antworten.

mfg Bomber


----------



## Gumbo (27. Juli 2005)

Probier mal Folgendes:
	
	
	



```
RewriteEngine	On
RewriteBase	/
RewriteRule	^index/?$					index.php		[QSA,L]
RewriteRule	^index/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$	index.php?$1=$2&$3=$4	[QSA,L]
```


----------



## Bomber (27. Juli 2005)

Hi, 

ich glaube, du hast meine Probleme nicht ganz verstanden.  
Das mit der page Variable am Anfang des GET Anhangs fehlt ja noch und das mit dem ^/index am Anfang  der Rule kann ich auch nicht so recht zuordnen.

VIelen Dank trotzdem, ich hoffe du hilfst mir nochmal, denn ohne euch sitz ich mit meiner beschränkten Logik ziemlich auf dem Trockenen.

Bomber


----------



## Gumbo (27. Juli 2005)

Ist die Apache-Konfigurationeinstellung FollowSymLinks aktiviert?


----------



## Bomber (27. Juli 2005)

Nein, war es nicht. Ich habe es jetzt auf FileInfo geändert.


----------



## Bomber (28. Juli 2005)

Wollte nochmal das Problem, dass ich in meinem Text zuletzt angesprochen habe darstellen:

Und zwar habe ich in meinem Hauptverzeichnis einen Ordner "cms", in dem befindet sich eine index.php und eine .htaccess Datei mit folgendem Inhalt:


```
RewriteEngine On

RewriteRule ^index.html$ /index.php [L]
```

Wenn ich nun aber "http://localhost/cms/index.html" aufrufe bekomme ich eine 404 Meldung das /index.php nicht gefunden wurde.. Allerdings sucht er im Hauptverzeichnis nach und nicht in "/cms", denn wenn ich das so ändere:


```
RewriteEngine On

RewriteRule ^index.html$ /cms/index.php [L]
```

dann findet er die index.php.
Aber das ist doch nicht richtig so, oder?

mfg Bomber


----------



## Gumbo (28. Juli 2005)

Wenn du möchtest, dass Anfrage des Schemas /index.html serverintern auf /cms/index.php umgeschrieben werden, dann schon.


----------



## Bomber (28. Juli 2005)

Aha?
Aber die index.html die ich damit anspreche liegt doch in /cms, genauso wie die .htaccess Datei? Ergo wenn ich /cms/index.html anspreche sollte ich dann doch auch in /cms/index.php landen und nicht in /index.php?

Oder sehe ich da was falsch?


----------



## Bomber (28. Juli 2005)

Ah! Habs verstanden

wenn man das "/index.php" durch ein "index.php" ersetzt, dann gehts. Bleiben nur noch die anderen Fragen zu klären  Aber es wird, ich blicke schon etwas mehr durch als gestern


----------



## Gumbo (28. Juli 2005)

Welche Fragen sind denn noch offen?


----------



## Bomber (28. Juli 2005)

Das die ganze Chose in den Document Root gehört hab ich grade auch geschnallt.. 

Ich muss jetzt nur noch herausfinden, wie ich das machen kann, das die 1. Variable (der erste "Ordner") immer als "page" deklariert wird und der rest erst als Variablenpaar "name/wert".

Ich meld mich nochmal, entweder mit der Lösung oder einer weiteren verzweifelten Frage.


----------



## Bomber (28. Juli 2005)

So! Da bin ich wieder 

Ich bin der Lösung zwar ein entscheidendes Stück näher gekommen, allerdings bin ich noch nicht am Ziel.

So ich habe im DocumentRoot jetzt eine .htaccess-Datei mit folgendem Inhalt:


```
RewriteEngine	On
RewriteRule	^cms/([^/]+)/([^/]+)(.*)$ /cms$3?$1=$2		[QSA,N]
RewriteRule 	^cms/?$ /cms/index.php	[QSA,L]
```

Funktioniert super! Nur leider wird wie URL dabei auch sichtbar umgewandelt (Aus localhost/cms/page/test wird localhost/cms/?page=test) was eigentlich nicht gewollt ist. Kann ich das ändern?

Desweiteren wollte ich ja, dass der erste "Unterordner" (bspw. localhost/cms/*NEWS*/variable1/variablenwert1 umgewandelt wird in den Wert der Variable "page", das versuchte ich folgendermaßen zu realisieren:


```
RewriteEngine	On
RewriteRule 	^cms/([^/]+)(.*)$ /cms$3?page=$1
RewriteRule	^cms/([^/]+)/([^/]+)(.*)$ /cms$3?$1=$2		[QSA,N]
RewriteRule 	^cms/?$ /cms/index.php	[QSA,L]
```

Das funktioniert wiederrum garnicht. 

Ich hoffe ihr könnt mir dabei helfen!

mfg
Bomber


----------

