Mod_rewrite

hi :bp:

Ich hätte mal eine Frage zu mod_rewrite.

Und zwar hab ich bei meiner Seite urls mit zb der Form „./?location=home“.
Diese werden so in „./home.html“ umgewandelt, was auch schon funktioniert:

RewriteRule ^(.*)\.html$ ./?location=$1

Auf der Seite kommen jedoch auch urls mit der Form vor „./?location=team&spieler=holger“.
Wie kann ich diese jetzt in „./team/holger.html“ umwandeln?
Ich hätte es damit probiert, das ganze will jedoch noch nicht so ganz funktionieren…

RewriteRule ^team/(.*)\.html$ ./?location=team&spieler=$1

Das liegt ganz klar daran, dass du oben alle Dateien, die mit .html enden schon umleitest, das hiesse dann, du müsstest dieser zweite code weiter oben stehen haben…
Dann dürfte es zu einem 500 error kommen, falls dies der fall ist, musst du es dann do machen:

RewriteRule ^team/(.*)\.html$ ?location=team&spieler=$1 [L]Bin mir nicht ganz sicher, ob das [L] das richtige ist, falls nicht, kannst du es auch mal mit [R] versuchen…
ich bin da auch nicht der mod_rewrite-Experte :wink:

mfg Joey

Hab das jetzt soweit umgeändert:

RewriteEngine On RewriteRule ^team/(.*)\.html$ ?location=team&spieler=$1 [L] RewriteRule ^(.*)\.html$ ?location=$1
funktioniert jedoch immer noch nicht…

[L] müsste eigentlich schon stimmen…

RewriteEngine On RewriteRule ^team/(.*)\.html$ ./?location=team&spieler=$1 [L] RewriteRule ^(.*)\.html$ ./?location=$1
ich glaube, so müsste es gehen:

RewriteEngine On RewriteRule ^team/(.*)\.html$ index.php?location=team&spieler=$1 [L] RewriteRule ^(.*)\.html$ index.php?location=$1
“index.php” allenfalls durch den korrekten dateinamen ersetzen…

mfg Joey

nope immer noch das gleiche. es macht ja eigentlich auch keinen unterschied ob man index.php davorsetzt oder nicht…

mit [L] wird das ganze nochmal von ganz oben durchlaufen :wink:

RewriteEngine On
RewriteRule ^team/(.*)\.html$ index.php?location=team&spieler=$1
RewriteRule ^(.*)\.html$ index.php?location=$1

das reicht schon :wink:

Ich bekom aber trotzdem noch einen 404 error… (beachunion.bplaced.net/team.html)
Kann es sein, dass damit nicht auf index.php sonder auf team/index.php umgleitet wird?

jup kann sein :wink:

RewriteEngine On
RewriteRule ^team/(.*)\.html$ /index.php?location=team&spieler=$1
RewriteRule ^(.*)\.html$ /index.php?location=$1

oder

RewriteEngine On
RewriteRule ^team/(.*)\.html$ /users/aschachinger/www/index.php?location=team&spieler=$1
RewriteRule ^(.*)\.html$ /users/aschachinger/www/index.php?location=$1

bin mir gerade nicht sicher ob das vom Host oder vom Dateisystem ausgeht :wink:

RewriteEngine On RewriteRule ^team/(.*)\.html$ /index.php?location=team&spieler=$1 RewriteRule ^(.*)\.html$ /index.php?location=$1
Damit, und mit dieser url beachunion.bplaced.net/team/holger.html bekomme ich für echo "location = " . $_GET['location']; echo "spieler = " . $_GET['spieler'];
die Ausgabe:

[quote]location = /index.php/holger
Notice: Undefined index: spieler in /users/beachunion/www/components/navi.php on line 3
spieler =[/quote]
Verstehe ich irgendwie gar nicht.
Hätte für location eher ‘team’ und für spieler ‘holger’ erwartet :neutral_face:

äußerst interresant, probier’s mal mit [L]

RewriteEngine On RewriteRule ^team/(.*)\.html$ /index.php?location=team&spieler=$1 [L] RewriteRule ^(.*)\.html$ /index.php?location=$1
Damit komme ich jetzt nicht mehr auf die 404. Ich bin jedoch jetzt im falschen Verzeichnis. Die CSS lädt erst wenn ich beim Pfad statt “css/style.css” “…/css/style.css” hinschreibe. Dasselbe mit den Bildern. include funktioniert jedoch noch. Muss ich für die css und die Bilder jetzt eine weitere RewriteRule hinzufügen?

normal nicht??? :astonished:
ist das deine komplette .htaccess??? Auch .htaccess in anderen Verzeichnissen haben einfluss…

mhm das ist meine einzige…die anderen sind alle nur deny,allow anweisungen.
wenn ich bei der css statt dem relativen einen absoluten pfad angebe funktioniert es natürlich. aber es müsste doch auch mit relativen gehen…

Wenn die url beachunion.bplaced.net/team/holger.html ist und der link zum css href=“css/style.css” ist müsste er das ja eigentlich zu /team/css/style.css zusammensetzten…

Ja, natuerlich. Nur hast du dort keine CSS-Datei hinterlegt …

Wenn man mit mod_rewrite verzeichnisartige Strukturen simuliert, dann empfiehlt es sich, alle externen Ressourcen (CSS, JS, Bilder) von der Domainwurzel aus zu referenzieren.

Ok ich hab jetzt statt team/holger.html einfach team-holger.html gemacht. dachte mir schon, dass es an sowas liegt…

edit
Ich hab einige Datein mit der Endung .html im Rootverzeichnis. Diese sind jedoch jetzt nicht mehr aufrufbar, da sie durch diese RewriteRule auf index.php?location=dateiname umgeleitet werden:

Um das zu verhindern hätte ich jetzt diese RewriteCond hinzugefügt:

RewriteCond %{REQUEST_FILENAME} !-F RewriteRule ^(.*)\.html$ index.php?location=$1 [L]
Dadurch müsste doch zuerst geprüft werden ob die Datei auf dem Server existiert und erst wenn nein die RewriteRule einspringen.

Wie man jedoch zB hier sieht funktioniert das noch gar nicht: beachunion.bplaced.net/ie6.html

Weiß jemand wie ich das machen muss?