# mod_rewrite Problem



## Bgag (14. Februar 2009)

Hallo!
ich habe leider noch nicht wirklich mit mod_rewrite gearbeitet und habe nun ein kleines Problem. Ich habe in einem Ordner eine index.php, einige Html-Dateien und noch ein paar andere PHP Dateien liegen. Ich möchte nun, dass wenn man eine PHP bzw. HTML-datei aufruft, dass man dann auf index.php?site=datei.html bzw. index.php?site=datei.html umgeleitet wird. Wie verhindere ich nun aber, dass ich einen Fehler bekomme, da er das auch mit der index.php macht. Kann mir jemand meinen Codeschnipsel korrigieren? Der funktioniert nämlich nicht. Soll heißen PHP Dateien werden einfach nicht angezeigt.
MfG, Andy

```
DirectoryIndex index.php?site=home.html
RewriteEngine on 
RewriteRule ^([a-zA-Z0-9]+)\.html$ index.php?site=$1.html
RewriteRule !^index\.php$ [ C]
RewriteRule ^([a-zA-Z0-9]+)\.php$ index.php?site=$1.php [L]
```


----------



## Sven Mintel (14. Februar 2009)

Moin Andy,

erstmal Eingangs: mod_rewrite hat nichts mit PHP zu Tun, das ist ein Apache-Modul, nächstes mal ist das u.U.  besser im Webserver-Forum aufgehoben 

Zu der Frage:
Dafür gibt es die sogenannten *RewriteCond* -Direktiven.
Über diese Direktiven kannst du Bedingungen definieren, welche erfüllt sein müssen, damit die darauf folgenden RewriteRules berücksichtigt werden.

Folgende RewriteCond sollte dies in deinem Fall tun:

```
RewriteCond %{REQUEST_URI} !^.*/(index\.php|)$
RewriteRule ^([a-zA-Z0-9]+)\.php$ index.php?site=$1.php [L]
```

Die Bedingung prüft die angeforderte Adresse gegen einen regulären Ausdruck, das wars schon.
Durch das dem Ausdruck vorangestellte Ausrufezeichen wird die Bedingung negiert, die nachfolgende RewriteRule wird also nur abgearbeitet, wenn der Ausdruck nicht zutrifft...das wars schon.

Im Apache-Handbuch findest du ein recht umfangreiches Tutorial zu mod_rewrite...den *URL Rewriting Guide*, auch RewriteCond wird dort abgehandelt, falls dich das neugierig gemacht haben sollte.


----------



## Bgag (14. Februar 2009)

guten Morgen!
Danke für deine Hilfe. Ich wusste zwar das mod_rewrite ein Apache Modul ist, aber ich dachte es würde hier ganz gut hinpassen. Der Thread gehört aber wohl doch besser ins Webserver-Forum gehört. Naja leider funktioniert das ganze immernoch nicht. Das "|" am ende der RewriteCondition verursacht einen Server Fehler. Nehme ich es weg, wird die Seite zwar angezeigt, aber die Weiterleitung auf die HTML-Dateien funktioniert nicht. Das Weiterleiten auf HTML Dateien leider auch nicht.

Ich habe noch folgendes versucht, jedoch werde ich immer auf die Dateien direkt weitergeleitet. 


```
DirectoryIndex index.php?site=startseite.html
RewriteEngine on
RewriteCond %{REQUEST_URI} !^.*/(index\.php)$
RewriteRule ^([a-zA-Z0-9]+)\.[php|html]$ index.php?site=$1.$2 [L]
```

MfG, Andy


----------



## Sven Mintel (14. Februar 2009)

Das mit dem Serverfehler lässt sich bei mir nicht reproduzieren

Dass da nichts umgeschrieben wird, liegt an der RewriteRule, diese müsste eher so aussehen:
	
	
	



```
RewriteRule ^([a-zA-Z0-9]+)\.(php|html)$ index.php?site=$1.$2 [L]
```


----------

