mod_rewrite Problem

B

Bgag

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
Code:
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]
 
Zuletzt bearbeitet von einem Moderator:
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:
Code:
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.
 
Zuletzt bearbeitet:
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.

Code:
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
 
Das mit dem Serverfehler lässt sich bei mir nicht reproduzieren:rolleyes:

Dass da nichts umgeschrieben wird, liegt an der RewriteRule, diese müsste eher so aussehen:
Code:
RewriteRule ^([a-zA-Z0-9]+)\.(php|html)$ index.php?site=$1.$2 [L]
 
Zurück