blubberbernd: RewriteEngine|mod_rewrite

Hi,

ich beschäftige mich seit ~2 Wochen mit PHP.
Nun bin ich auf dieses Modul mod_rewrite gestoßen, aber komm damit nicht ganz klar.

Genauer gesagt mit der RewriteRule.
Bisher arbeite ich mit Xampp "lokal"

Meine Seite ist für mich bisher über http://localhost/website/index.php erreichbar.
Wenn ich auf "Unterseiten" zugreifen will, musste ich immer an das index.php ein "?var=1&..." usw. anfügen. Mittlerweile hab ich es schon soweit hinbekommen, dass ich einfach nur index.php?seitename/unterkategorie angeben kann und nun via PHP die richtige Datei aus dem Query-String ermitteln kann.
Nun möchte ich es aber so machen, dass auch das "index.php?" verschwindet.
Bisher arbeite ich eigentlich sogar nur an einem Gerüsst für Webseiten.
Folgenden Inhalt in der .htaccess habe ich schon probiert:

RewriteEngine On
RewriteBase /website/
RewriteRule (.*) index.php?$1

Funktioniert aber überhaupt garnicht so, wie ich es erwartet hatte.
Egal wie ich meine Seite aufrufe ("locahost/website/home", "locahost/website/irgendeine/andere/seite" usw) in PHP ist $_SERVER["QUERY_STRING"] immer nur "index.php"

Wie muss die RewriteRule für mich richtig lauten?

MfG
blubberbernd

  1. Funktioniert aber überhaupt garnicht so, wie ich es erwartet hatte.
    Egal wie ich meine Seite aufrufe ("locahost/website/home", "locahost/website/irgendeine/andere/seite" usw) in PHP ist $_SERVER["QUERY_STRING"] immer nur "index.php"

    a) was sagt denn $_SERVER['PATH_INFO']?

    b) welches Script erreichst Du denn mit den aufrufen? Die index.php? Das wäre doch ein Erfolg!

    Cheers,
    Baba

    1. a) was sagt denn $_SERVER['PATH_INFO']?

      $_SERVER['PATH_INFO'] ist natürlich leer bzw undefiniert, da ich ja nichts zwischen index.php und ?... stehen hab.

      b) welches Script erreichst Du denn mit den aufrufen? Die index.php? Das wäre doch ein Erfolg!

      Jap, kam alles beim index.php an.

      Dank dedlfix' Hinweis hab ich das Problem nun lösen können :]
      Trotzdem möchte ich dir auch für die Hilfe danken ;)

      MfG
      blubberbernd

  2. Tach!

    ich beschäftige mich seit ~2 Wochen mit PHP.

    Das ist für dein Apache-Problem nicht weiter relevant.

    RewriteEngine On
    RewriteBase /website/
    RewriteRule (.*) index.php?$1

    Funktioniert aber überhaupt garnicht so, wie ich es erwartet hatte.
    Egal wie ich meine Seite aufrufe ("locahost/website/home", "locahost/website/irgendeine/andere/seite" usw) in PHP ist $_SERVER["QUERY_STRING"] immer nur "index.php"

    mod_rewrite veranlasst nach dem Umschreiben einen internen Redirect mit der neuen Adresse und kommt damit erneut an deiner RewriteRule vorbei. Die wird wieder tätig und schreibt erneut um.

    Wie muss die RewriteRule für mich richtig lauten?

    Du musst verhindern, dass existierende Dateien und Verzeichnisse umgeschrieben werden. Das brauchst du ja auch für einzubindende Ressourcen. Dazu kann man die folgenden RewriteConds vor die RewriteRule setzen.

    RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d

    dedlfix.

    1. Du musst verhindern, dass existierende Dateien und Verzeichnisse umgeschrieben werden. Das brauchst du ja auch für einzubindende Ressourcen. Dazu kann man die folgenden RewriteConds vor die RewriteRule setzen.

      RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d

      Klingt logisch und hat auch funktioniert. Danke für die fixe Hilfe :]

      MfG
      blubberbernd