Zur Navigation

php auf html per mod_rewrite, ja wie nur?

tutorial für regex-legastheniker gesucht

1 Michel (Gast)

hallo liebe gemeinde,
seit tagen bin ich auf der suche nach einer lösung für eine anscheinend einfache aufgabe:
sämtliche php-seiten eines projektes sollen als html ausgegeben werden, ohne doppelte erreichbarkeit, sämtliche links sollen html-seiten erreichen.
mod_rewrite läuft. es sind ganz einfache *.php-docs, ohne ? und krams.

alles was sich so finden läßt, klappert nicht:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule  ^(.*)\.php$ /$1.html [R=301,L]
RewriteRule ^(.*)\.html$ $1.php  [R=301,L]

keine reaktion, unterseiten werden jedoch vom apachen als
Moved Permanently - The document has moved ausgegeben. alle seiten liegen auf einer ebene, startseite ist erreichbar.

das nächste fand ich irgendwo, es werden zumindest die seiten als *.html ausgegeben, jedoch gibts vom apachen auch die obige meldung:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule    ^(.+)\.html$     $1.php   [L]
RewriteCond    %{REQUEST_URI}   !\.html$
RewriteRule    ^(.+)\.php$      $1.html   [L,R=301]

woraus der geneigte leser sicherlich zu recht schließen muss, dass ich nicht die geringste peilung habe, was fehlen könnte, bzw. zu tun ist.

anscheinend bin ich hier auf eine plattform gestossen, auf der sich solcher lappalien angenommen wird.
ich würd mich riesig freuen und mich mit einigen besprechungen dieser seite erkenntlich zeigen!

vielen dank im voraus, michel

12.05.2011 14:51

2 Jörg Kruse

sämtliche links sollen html-seiten erreichen

Dazu musst du die Links in den .php Dateien ändern - mit mod_rewrite wird nur der zweite Schritt, nämlich die serverinterne Rückumwandlung der URLs vorgenommen

keine reaktion, unterseiten werden jedoch vom apachen als
Moved Permanently - The document has moved ausgegeben.

Das ist dann ja mitnichten "keine Reaktion", wenn eine solche Meldung erscheint. Etwas merkwürdig ist allerdings, dass der Browser da nicht weiterleitet. Mit was für einem Browser testet du das ganze?

Möglicherweise wird durch deinen Code eine Endlosweiterleitung erzeugt und der Browser stoppt dann von sich aus irgendwann (Firefox z.B. würde dann allerdings eine etwas erhellendere Fehlermeldung ausgeben)

Da in der htaccess Datei REQUEST_URI etwas unzuverlässig ist, würde ich dort stattdessen mit THE_REQUEST arbeiten. Das Weiterleitungsziel sollte darüber hinaus immer als vollständige URL angegeben werden

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule    ^(.+)\.html$     $1.php   [L]
RewriteCond    %{THE_REQUEST}   !\.html$
RewriteRule    ^(.+)\.php$      http://example.org/$1.html   [L,R=301]

Edit: fehlerhafte Annahme korrigiert

12.05.2011 15:48 | geändert: 12.05.2011 15:55

3 Michel (Gast)

hui, na das ging flott! vielen dank für die schnelle hilfe, jörg.

getestet wurde mit opera 11.1, hab jetzt FF4.0 angeworfen und den überarbeiteten code angetestet:

Fehler: Umleitungsfehler
Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.

riecht nach schleife, oder?

12.05.2011 16:09

4 Jörg Kruse

Ja, das $ in der RewriteCond muss noch raus, da THE_REQUEST nicht mit dem REQUEST_URI endet

RewriteCond    %{THE_REQUEST}   !\.html

12.05.2011 16:27

5 Michel (Gast)

Supi, datt funzt! Danke Jörg.

Werd den Thread mal ein wenig pushen. Denke, dass ne Menge User da draussen auch am suchen sind.

12.05.2011 16:39

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]