mod_rewrite funktioniert nicht

marioe

Grünschnabel
Hallo, bin neu hier :D

Hab ein Problem bezüglich mod_rewrite will folgende URL http://www.mein-server.com/index.php?file=Startseite in http://www.mein-server.com/Startseite.html umschreiben lassen.
Verwende folgende Regel:

RewriteEngine On
RewriteRule ^([^/]*)\.html$ /index.php?file=$1 [L]

Funktioniert leider überhaupt nicht, ist so als wäre keine Regel vorhanden.
Würde mich freuen wenn Ihr mir helfen könntet. :)
Hab auch schon gesucht, leider im Forum wie auch durch googlen nichts funktionierendes gefunden...

MFG marioe
 
Hallo!

Ein kleines praktisches Beispiel (schon fast ein Mini-Tutorial ;)).
Wir gehen davon aus dass das Script "rewritetest.php" heisst und diesem die Variable "site" angehängt wird.

Man lege eine Datei mit dem Namen ".htaccess" an und packe folgenden Code rein:
Code:
### rewriterule for rewritetest.php
# Falls der Scriptname nicht als Indexdatei in der Serverkonfiguration eingetragen ist,
# wird es hier nachgeholt.
DirectoryIndex rewritetest.php

# Falls jemand eine Datei oder ein Verzeichnis aufruft welches nicht existiert,
# wird er einfach auf das Hauptverzeichnis umgeleitet.
# Da zuvor ja die Indexdatei festgelegt wurde, wird also auf das Script umgeleitet.
# Den Rest erledigt dann das Script (es wird also "Startseite" angezeigt).
ErrorDocument 404 /

# Erstmal muss die RewriteEngine gestartet werden. *Zündschlüssel rumdreh*
RewriteEngine On

# Jeder Dateiname mit der Endung ".html" wird an das Script übergeben.
# Hierbei ergibt der Dateiname (ohne Endung) den Wert für die ans Script angehänge Variable "site".
RewriteRule ^(.*)\.html$ rewritetest.php?site=$1
###

Dann lege man eine Datei mit dem Namen "rewritetest.php" an und füge folgenden Code ein:
PHP:
<?php
/* Wurde die Variable "site" ans Script übergeben? */
if(isset($_GET["site"])) {

    /* Dann prüfe welchen Wert die Variable "site" bekommen hat. */
    switch($_GET["site"]) {

        /* Hat die Variable "site" den Wert "one" bekommen (aufgerufen mit "one.html"), dann zeige "Seite eins" an. */
        case "one":   echo "Seite eins<br>";
                      echo "<a href='index.html'>zur&uuml;ck zur Startseite...</a><br>";
                      break;

        /* Hat die Variable "site" den Wert "two" bekommen (aufgerufen mit "two.html"), dann zeige "Seite zwei" an. */
        case "two":   echo "Seite zwei<br>";
                      echo "<a href='index.html'>zur&uuml;ck zur Startseite...</a><br>";
                      break;

        /* Hat die Variable "site" den Wert "index" bekommen (aufgerufen mit "index.html"), dann zeige "Startseite" an. */
        case "index": echo "Startseite<br>";
                      echo "<a href='one.html'>eins...</a><br>";
                      echo "<a href='two.html'>zwei...</a><br>";
                      break;

        /* Hat die Variable "site" einen ungültigen Wert bekommen, dann leite zur Startseite (index.html) um. */
        default: header("Location: http://".$_SERVER["HTTP_HOST"]."/index.html");
    }
} else {
    /* Wurde keine Variable oder eine ungültige Variable an das Script übergeben, dann leite auf die Startseite (index.html) um. */
    header("Location: http://".$_SERVER["HTTP_HOST"]."/index.html");
}
?>
Aufgerufen wird die Seite dann mit "index.html", "one.html" oder "two.html".
Je nach dem wie man die Seite aufgerufen hat, bekommt man dann die "Startseite", "Seite eins" oder "Seite zwei" angezeigt.
Ruft man die Seite mit einem falschen Namen auf, z.b. mit "blablub.html", wird man auf "Startseite" umgeleitet.

Ach, was rede ich lange, es ist ja ein einsatzfertiges Beispiel..... also einfach mal selber testen. ;)
Der Rest sollte sich eh aus den Kommentarzeilen ergeben.

Gruss Dr Dau
 
Zurück