Feeds:
Beiträge
Kommentare

Posts Tagged ‘mod_rewrite’

So heute wird es technisch. Das Umschreiben vor URLs mit mod_rewrite ist inzwischen Standard. Im konkreten Fall möchte ich über meine index.php die Unterseite „translate“ aufrufen und als zu übersetzendes Wort das Wort „kuchen“ übermitteln. Das bedeutet zum Beispiel, setzt man einen Link auf http://www.example.com/translate/kuchen.html  so erzeugt mod_rewrite daraus http://www.example.com/index.php?page=translate&query=kuchen. Das ist etwas das meine index.php verstehen und bearbeiten kann. Der .htaccess-File sieht wie folgt aus:

RewriteEngine On</pre>
RewriteRule ^([^/]*)/([^/]*)\.html$ index.php?page=$1&query=$2 [L]

Das bedeutet: auch wenn die Seite dynamisch generiert wird habe ich zu dem Suchwort „kuchen“ eine feste URL. Ich kann diese also nehmen und jemandem schicken und er bekommt das selbe Ergebnis. Die URL ist schön Suchmaschienenfreundlich, was will man mehr?

Das Problem

Das Problem entsteht woanders nämlich im Formular.

<form action="www.example.com/index.php" method="get">
		<input type="hidden" name="page" value="translate" />
		<input type="text" name="query" />
		<input type="submit" value="übersetzen" />
</form>

Der Browser erzeugt daraus nämlich wieder den Aufruf http://www.example.com/index.php?page=translate&query=kuchen und das steht dann in der Adressleiste. Niemand wird also die schöne rewrite rule je zu Gesicht bekommen.

Die Lösung

Die Lösung lautet: Weiterleitung. Da gibt es erst einmal grundsätzlich zwei Möglichkeiten. Die Erste besteht darin diese Weiterleitung auch mit mod_rewrite zu regeln. Ein Beispiel hierfür bietet talkincode.com. Eine weitere Möglichkeit bietet php selbst.

Der Code

Zunächst wird der action-Parameter des Formulars geändert. Dieses soll nun auf die neue Datei url.php verweisen. Sieht dann also so aus:

<form action="www.example.com/index.php" method="get">

Die Datei url.php enthält folgenden Code:

<?php
// renames URLs from get parameters to the rewrite rules from .htaccess
$q = '';
// creates the static path
if (isset( $_GET['page'] ) ) $q .= $_GET['page'];
if (isset( $_GET['query'] )  AND $_GET['page'] == 'translate' ) $q .= '/'.$_GET['query'];

if ($q != '') {
   header( 'Location: www.example.com/' . $q . '.html' );
}
?>

Zunächst wird hier der Pfad erzeugt. Anschliessend wird die „page“-Variable angehängt, dann ein Schrägstrich und dann die „query“ Variable. Sind beide Variablen übergeben worden und der Pfad ist nicht leer wird dem Browser der Location Header gesendet. Dieser weiss nun, dass er das gesuchte Dokument unter der neuen URL finden kann.

Das Ergebnis

Benutzt der Nutzer nun das Formular wird vom Browser url.php aufgerufen und die Formulardaten page und query als GET Parameter angehängt. Diese Datei erzeugt nun die Weiterleitung zu der umgeschriebenen URL. Und genau diese steht dann auch in der Adressleiste des Browsers.

Problem gelöst. Sollten Fragen oder Anmerkungen sein freue ich mich sehr über Feedback.

Read Full Post »

%d Bloggern gefällt das: