# RewriteRule Frage (mod_rewrite)



## chegga (6. September 2004)

Hallo,

ich habe eine Frage zu einer mod_rewrite Regel:

Ich möchte gerne, dass immer einer Datei nach dem HOST eingebunden wird.

^{HTTP_HOST}/(.*)& {HTTP_HOST}/index.php/$1

Auch wenn ich den Host direkt angebe und keine Variable, klappt es nicht.
Ich trage die Regeln direkt in die Apache conf ein, so sind sie doch auch automatisch für alle Unterverzeichnisse gueltig, oder?

Ich konnte ich auch nichts direkt finden. Kann mir vielleicht jemand weiterhelfen?
Danke schon einmal!


----------



## Sven Mintel (6. September 2004)

Da fehlt das *%* vor dem *{HTTP_HOST}*....welches der Rule signalisiert, dass es sich um eine Servervariable handelt.


----------



## chegga (7. September 2004)

Danke fuer den Hinweis, aber es muss noch tiefgruendiger sein. Ich hatte es vorher schon ohne die Host Variable ausprobiert gehabt.

Hmmm..


----------



## Sven Mintel (7. September 2004)

Hab jetzt nicht nachgeschaut, woran es liegt:-( 

....aber die HOST-Variable benötigst du ansich garnicht....


```
RewriteRule ^/([^/]*)& /index.php/$1
```

....sollte den Zweck bereits erfüllen(sofern ich richtig verstanden habe, was du vorhast)

Wenn nicht, poste mal anhand 2er URLs ein Beispiel, was du umschreiben willst.


----------



## chegga (7. September 2004)

Danke fuer Deine Hilfe!

Also eigentlich habe ich folgendes vor:

http://www.domain.de/aaa/bbb/ccc (alle Anfragen eigentlich)

moechte ich so umleiten, dass immer die php Datei aufgerufen wird:

also umleiten nach http://www.domain.de/index.php/aaa/bbb/ccc


So kann ich dann ueber das Sckript in der index.php dynamisch die richtige Seite aufbauen. Die Verzeichnis-Struktur ist komplett virtuell.


----------



## Sven Mintel (8. September 2004)

Da probiers dies:

```
RewriteEngine On
RewriteRule   !^index\.php.*      - [ C]
RewriteRule   (.*)                  /index.php/$1
```

Zur Erklärung:
die erste Rule ersetzt nix,(das '-' hat dort eine spezielle Bedeutung...eben "nichts ersetzen").
Die Flag [ C]....(Chain)...bedeutet, dass diese Rule mit der nächsten verknüpft ist....nur wenn die erste Rule zutreffend war, wird die Zweite beachtet.

Es wird also erstmal geprüft, ob es sich bei der Anfrage nicht um die index.php selbst handelt(die würde ja sonst auch umgeschrieben werden).

In der nächsten Zeile wird dann alles an die index.php rangehängt....der HOST spielt ja, wie bereits erwähnt, keine Rolle.


----------



## Andreas Späth (8. September 2004)

Hallöchen

Sowas hab ich diese Tage auch vorgehabt 
Hätte da aber auch noch ne kleine Frage dazu 

Wenn ich nun dass so mache wie fatalus geschrieben hat.
Dann wird doch auch wenn ich zB. "www.domain.de/images/image1.jpg" aufrufe das vom Server verarbeitet wie "index.php/images/image1.jpg" oder ?

Wie kann ich einzelne Verzeichnisse von dieser Regel ausschliesen ?

Ich weiss ist ne blöde Frage aber von .htaccess hab ich null Peilung, und das obwohl ich schon soviel zu dem Thema gelesen hab


----------



## chegga (8. September 2004)

@ fatalus,
besten Dank!

@ DJ Teac,
vielleicht kannst Du dir es ja zum Vorteil machen und die Grafikanfragen ueber das Skript entsprechend ausfuehren (und nicht direkt ausgeben).


----------



## Andreas Späth (8. September 2004)

@Chegga: Stimmt, dassich darauf nicht selbst gekommen bin 
Ich bau meinen Bilderklau einfach direkt in das Script mit ein


----------



## chegga (8. September 2004)

Genau, nur gibt es da noch das Problem, wie Du intern die Bilder aufrufen kannst


----------



## Andreas Späth (8. September 2004)

intern sollte das ja kein Problem sein, das php script wird ja nicht von Mod_rewrite beeinflusst bei seinen Werken.


----------



## chegga (8. September 2004)

Wenn du eine Grafik laedst muesste der Pfad auch mit mod_rewrite umgeschrieben werden.

Also einfach ein image tag mit dem Dateinamen duerfte nicht gehen.


----------



## Sven Mintel (8. September 2004)

Um auf das Ausschliessen einzelner Verzeichnisse zurückzukommen....das funktioniert genau wie bei der index.php:
	
	
	



```
RewriteEngine On
RewriteRule   !^index\.php.*      - [ C]
RewriteRule   !^images/.*      - [ C]
RewriteRule   (.*)
```


----------



## chegga (8. September 2004)

Ich glaub, Du hast ein .* vergessen am Anfang:

```
RewriteRule   !^.*images/.*      - [ C]
```

Wenn man seine Verzeichnisstruktur nicht veraendern moechte, kann man das images/ auch einfach wieder entfernen mit:

```
RewriteRule   ^(.*)images/(.*)$ $1$2
```

also komplett dann:

```
RewriteRule   !^index2\.php.*      - [ C]
RewriteRule   !^.*images/.*      - [ C]
RewriteRule   (.*)                  /index2.php/$1
RewriteRule   ^(.*)images/(.*)$ $1$2
```


----------

