mod_rewrite - if-then benötigt?

noOx

Grünschnabel
Hallo, ich stehe mal wieder vor einem kleinen "Problem" und zwar möchte ich die URLs meiner Seite umschreiben. Bin im Bereich PHP Anfänger und htaccess sowieso.

Nun, ich möchte die URLs folgend umschreiben:

index.php, test.php etc. in index.html, test.html etc.
Müsste ja damit gehen:
Code:
RewriteRule ^(.*).html$ $1.php

Wenn aber an der index.php ein GET-Parameter hängt: index.php?gbpics=blablub dann soll das ganze sich in meineseite.de/blablub.html ändern.
Dafür habe ich diesen Code:
Code:
RewriteRule ^([^/\.]+).html$ index.php?gbpics=$1

Jetzt funktioniert aber immer nur eins vom beiden, es kommt nru darauf an welches über der anderen RewriteRule liegt. Denke ich brauche if & then, aber damit kenn ich mich in mod_rewrite wirklich nicht aus und ich hoffe ihr könnt mir helfen!

Meine vollständige htaccess-Datei

Code:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([^/\.]+).html$ index.php?gbpics=$1 [L]
RewriteRule ^(.*).html$ $1.php
 
Wenn du...

index.php, test.php etc. in index.html, test.html etc.

...erreichen willst ist das

Code:
RewriteRule ^(.*).html$ $1.php

...schonmal genau falsch rum.
Aber vllt. wars ja nur ein schreibfehler.

Um dein gewünschtes Ziel zu erreichen musst du lediglich vor oben genannter Regel noch folgendes definieren

Code:
RewriteCond %{QUERY_STRING} gbpics=(.*)
RewriteRule .* %1.php? [L]

Die RewriteRule setzt nur ein wenn die RewriteCond und die Rule passen.
Bedeutet :
Wenn keine gbpics variable angehängt ist wird die Rule nicht angewendet weil die RewriteCondition nicht passt.

Die nachfolgende Regel wäre dann die
Code:
RewriteRule ^(.*).html$ $1.php

(immernoch falsch rum) und die tut dann einfach sturr dumm ihre Arbeit ;)
 
Danke für deine Hilfe! Bin grad nur etwas verwirrt. Ich will index.php in index.html umwandeln.
Heißt das die Rule müsste so aussehen?
Code:
RewriteRule ^(.*).php$ $1.html

Denn das funktioniert genau richtig: index.php in index.html
Code:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*).html$ $1.php
 
Zuletzt bearbeitet:
Also ich habe eine index.php, ich möchte aber in der Zeile oben index.html statt index.php stehen haben.

Das funktioniert bei mir aber mit
Code:
RewriteRule ^(.*).html$ $1.php

In welcher Reihenfolge müssen die Sachen stehen? Hab jetzt einige ausprobiert, aber es funktioniert einfach nicht :(

Danke für deine Hilfe, häng schon den ganzen Tag dran & Google wie ein verrückter :D
 
Das funktioniert bei mir aber mit
RewriteRule ^(.*).html$ $1.php

Das glaub ich erst wenn ichs sehe ;)

Die Reihen folge ist alt neu

Das würde also in deinem Fall bedeuten

index.html wird zu index.php

Mal zur info :

Was du in deiner Browserzeile oben siehst muss nich umbedingt dem entsprechen was in wirklichkeit "geladen" wird.

Code:
RewriteRule    ^foo\.html$  bar.html
Das ist ein interner Redirect, der user kriegt davon nichts mit.
Beim aufruf von foo.html wird bar.html geladen aber in der Browserzeile steht immernoch foo.html

Code:
RewriteRule    ^foo\.html$  bar.html  [R]

Und so wärs ein externer, bei dem auch der user sieht was los ist.

Also lass dich davon mal nicht täuschen.

Mal davon abgesehen, hast du in der htaccess noch weitere Regeln definiert?

//E

ganz vergessen:

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

Vielleicht klärt das ein paar fragen
 
Zuletzt bearbeitet:
Glaub du hast mich missverstanden oder ich hab mich falsch ausgedrückt weil ich keine Ahnung hab :D

Ich möchte keinen redirect, ich möchte lediglich die URL umschreiben.

Beispiel: Wenn ich index.php oder index.html eingebe, es macht keinen Unterschied weil immer die gleiche Datei geladen wird: index.php
Das einzige was unterschiedlich ist, ist die Adresse in der Browserleiste (index.php oder halt index.html). Am besten wär es dann natürlich noch wenn index.php eingibt das es das automatisch nach index.html umformt.
 
Das
Code:
RewriteRule    ^foo\.html$  bar.html
Beispiel war vllt. etwas blöd, sry für die verwirrung.

Lass es mich nochmal kurz und knackig versuchen ;)

Wenn ich index.php oder index.html eingebe, es macht keinen Unterschied weil immer die gleiche Datei geladen wird: index.php

Erreichst du mit:

Code:
RewriteRule ^(.*)\.html$ /$1.php [L]

(Ja jetzt doch so rum, haben halt doch ein bisl aneinander vorbei geschwafelt :) )


Am besten wär es dann natürlich noch wenn index.php eingibt das es das automatisch nach index.html umformt.

Das wirst du so nicht erreichen können, jedenfalls nicht mit einer RewriteRule

Das ganze würde nämlich in zusammenhang mit deinem ersten Wunsch eine unendliche Schleife ergeben
 
Danke für das aufklären :D

Habs bis jetzt aber immernoch nicht hinbekommen beide Regeln zu Laufen zu bringen, liegt bestimmt an der Reihenfolge.

Wie muss die Reihenfolge bei deinen genannten Rules aussehen, damit beides funktioniert?
 
Versuch mal das
Code:
RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} !.*index.(html|php).*$
RewriteRule ^(.*)\.(html|php)$ /index.php?gbpics=$1 [L]

RewriteRule ^(.*)\.html$ /$1.php [L]

Ich bin mir nicht sicher ob ich das
Wenn aber an der index.php ein GET-Parameter hängt: index.php?gbpics=blablub dann soll das ganze sich in meineseite.de/blablub.html ändern.

rchtig verstanden habe. Sollte der Code oben nicht zum gewünschten Ergebnis führen müsstest du nochmal etwas genauer werden ;)
 

Neue Beiträge

Zurück