dedlfix: mod_rewrite - forcetype - herausfinden, was geht

Beitrag lesen

echo $begrüßung;

RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule .* de.php [QSA]
Ich würde aber gerne abhängig davon, welche Sprache gesetzt ist auf die jeweilige Seite leiten:

  • domain.de/de/kontakt auf de.php
  • domain.de/en/kontakt auf en.php

Auch das ist kein Problem

RewriteRule ^(.*)/.*$ $1.php [QSA]

Des Weiteren ist für mich die Frage, wenn ich wirklich Verzeichnisse etc. ignoriere, was passiert dann, wenn ich z.B. ein Bild <img src="domain.de/bilder/bild.jpg"> einbinde? Dies wird ja dann auch weitergeleitet?

Da die Regel bei existierenden Dateien aufgrund der RewriteConds nicht zutrifft, werden diese normal ausgeliefert.

Kann ich auch für Projekte, bei denen nur eine Sprache exisiert sowas wie domain.de/kontakt abfangen und auf index.php/kontakt weiterleiten?

Natürlich. Gleiche Regeln wie oben, nur index statt de.

Einzige frage dazu, was eignet sich am besten um "http-Zugriffe" mit PHP abzufeuern und zu prüfen ob ich einen 404 habe?

Eine fertige HTTP-Request- oder -Client-Klasse, die sich um den ganzen "Kram" kümmert, die getestet ist, und der du nur noch die URL übergibst und im Gegenzug Response-Code und Inhalt übergeben bekommst. Gibt's beispielsweise bei PEAR. Ansonsten gibt es auch noch curl, aber ohne Vorhandenseinsgarantie.

Wegen dem Handling von Seiten, die eventuell selber wieder Parameter erfordern: Was ist da gängige Praxis? domain.de/kontakt/senden/blabla=true

Der eingangs genannte Vorschlag mit Auswertung des REQUEST_URI statt der oft zu sehenden Anhängerei der Pfadbestandteile als Query-Parameter hat zwar ein gegenüber dem Zugriff auf das $_GET-Array etwas aufwendigeres Auswerten zur Folge, lässt aber ebendieses $_GET-Array komplett für echte Query-Parameter unangetastet.

Ein GET-Formular, das action="/kontakt/senden" hat, erzeugt einen Request nach /kontakt/senden?param=value.

Ich seh gerade, dass bei vor Auswertung des REQUEST_URI noch der Querystring abgeschnitten werden muss. Diese Daten stehen da ja auch drin. Das hatte ich beim ersten Antworten nicht beachtet.

Und dann mit php einfach die ersten an / gesplitteten Elemente als Seitenpfad registrieren und sobald das erste Element mit = auftaucht entsprechende GET setzen?

GET und POST funktionieren wie üblich. Sie werden von meinem Vorschlag nicht beinträchtigt.

Wie würde ich dann ein GET-Formular schön umleiten? Von sich aus würde es ja ertsmal einfach domain.de/kontakt/senden?blabla=true erzeugen?

Wohin umleiten? Eine RewriteRule interessiert sich nicht für den Querystring. Sie leitet anhand des Pfades um. Das [QSA] sorgt dann dafür, dass der Querystring nicht verloren geht.

Bitte für Beispiele die dafür vorgesehenen Domainnamen verwenden, nicht welche, die irgendwem gehören könnten.

echo "$verabschiedung $name";