# ModRewrite: Ordner umleiten



## spex (4. Oktober 2008)

Moische,

ich bin dabei meine Seite etwas ordentlicher zu gestalten.
Dabei versuche ich erstmal alle Anfragen folgendermassen *sichtbar* umzuleiten:


```
example.com => http://www.example.com/en/
example.de    => http://www.example.com/de/
```
Nebenbei wird, falls nicht schon passiert, an jede URL noch ein "/" angehängt.

Das bewerkstellige ich alles mittels:

```
RewriteEngine On
Options +FollowSymlinks
RewriteBase /

RewriteCond %{REQUEST_URI}  !^(.*)/$ [NC]
RewriteCond %{REQUEST_URI}  !^/(.*)\.(.*)$ [NC]
    RewriteRule (.*)  $1/ [R=301,L]

RewriteCond %{HTTP_HOST}  ^(.*)example\.de$ [NC]
RewriteCond %{REQUEST_URI}  !^(.*)de/(.*)$ [NC]
    RewriteRule ^(.*)$ http://www.example.com/de/$1 [R=301,L]

RewriteCond %{HTTP_HOST}  ^(.*)example\.com$ [NC]
    RewriteCond %{REQUEST_URI}  !^(.*)(de|en)/(.*)$ [NC]
    RewriteRule ^(.*)$ http://www.example.com/de/$1 [R=301,L]
```
Das "/de/" und "/en/" in der URL sind wichtig, da ich später mittels PHP die URL zerstückle und die aufgerufene Sprache aus einem XML File auslese.

Damit das Alles nun auch funktioniert und ich keinen 404 Fehler bekomme, muss alles was hinter "/de/" und "/en/" kommt *intern *nach /v1/ weitergeleitet werden.

Also prinzipiell soll der Benutzer *nicht sichtbar* auf http://www.example.com/v1/ geleitet werden.

Als Beispiel:
Der Benutzer geht auf http://www.example.com/de/usercp/index.php

Der Richtige für ihn nicht sichtbare Pfad soll nun so aussehen:
http://www.example.com/v1/usercp/index.php​Der Aufbau des htdocs Verzeichnisses ist folgendermassen: (Vielleicht hilft das noch)

```
/
/.htaccess
/.v1
/v1/index.php
/v1/usercp/
/v1/usercp/index.php
usw....
```

Wie kann ich das am besten basteln? Bei Mod_Rewrite blick ich noch nicht so ganz durch.

Gruss


----------



## Gumbo (4. Oktober 2008)

Probier mal Folgendes:
	
	
	



```
RewriteCond %{HTTP_HOST} \.de$ [NC]
RewriteRule ^ http://www.example.com/de%{REQUEST_URI} [R=301]

RewriteCond %{HTTP_HOST} (^|\.)example\.com$
RewriteRule !^(de|en)/ http://www.example.com/de%{REQUEST_URI} [R=301]

RewriteCond %{REQUEST_URI} \.[^/]+$
RewriteRule !/$ %{REQUEST_URI}/ [R=301]

RewriteRule ^v1/ - [L]
RewriteRule ^(de|en)/(.*) /v1/$2 [L]
```


----------



## spex (4. Oktober 2008)

Bei dir leitet er nur /de/ und /en/ auf /v1/ um.
/en oder /de gehen ins leere und example.com leitet ganz normal ins Heimatverzeichnis.

Das ist aber schonmal ein Anfang . Ich hab nochmal etwas rumgebastelt und bin nun bei folgendem angelangt:

```
RewriteCond %{REQUEST_URI}  !^(.*)/$ [NC]
RewriteCond %{REQUEST_URI}  !^/(.*)\.(.*)$ [NC]
    RewriteRule (.*)  $1/ [R=301,L]

RewriteCond %{HTTP_HOST}  ^(.*)example\.de$ [NC]
RewriteCond %{REQUEST_URI}  !^/(de|en)(.*)$ [NC]
	RewriteRule (.*) http://www.example.com/de%{REQUEST_URI} [R=301,L]

RewriteCond %{HTTP_HOST}  ^(.*)example\.com$ [NC]
RewriteCond %{REQUEST_URI}  !^/(de|en)(.*)$ [NC]
	RewriteRule ^(.*)$ http://www.example.com/en%{REQUEST_URI} [R=301,L]

RewriteRule ^v1/ - [L]
RewriteRule ^(de|en)/(.*) /v1/$2 [L]
```

Der einzige Fehler hier ist noch das er jedesmal das /v1/ hintendranne hängt, in einer Endlosschleife.

Nimmt man folgendes, leitet er zwar /de/ und /en/ nach v1, und example.com nach example.com/de/, aber example.com nicht nach example.com/en/.


```
RewriteCond %{REQUEST_URI}  !^(.*)/$ [NC]
RewriteCond %{REQUEST_URI}  !^/(.*)\.(.*)$ [NC]
    RewriteRule (.*)  $1/ [R=301,L]

RewriteCond %{HTTP_HOST}  ^(.*)example\.de$ [NC]
RewriteCond %{REQUEST_URI}  !^/(de|en)(.*)$ [NC]
	RewriteRule (.*) http://www.example.com/de%{REQUEST_URI} [R=301,L]

RewriteRule ^v1/ - [L]
RewriteRule ^(de|en)/(.*) /v1/$2 [L]
```

xD leicht verwirrend ich weis.

Vielleicht ne Idee?


----------

