FabSch: htacces Rewrite Engine

Hallo,

ich habe ein Problem mit dem Server kann aber nicht genau sagen an was es liegt.
Meine Situation:

Meine einzelnen Seiten liegen alle so vor:

-admin
--user_aendern
---html.php
---css.php
---javascript.php
---register.php

In html.php steht der HTML Code und so weiter. In register.php steht der Titel und noch einige andere projektspezifische Sachen zu der Seite.

Alle anfragen auf solche Seiten sollen über die index.php laufen und als GET Parameter die Seite mitbekommen.
"http://localhost/admin/user_aendern/" -> "http://localhost/index.php?page=admin/user_aendern/"

Dies macht man soviel ich weiß über RewriteRule in der htaccess.
Nun zum Problem. Wenn ich in der htaccess das festlege was ich will funktioniert alles nur solange ich genau
"http://localhost/admin/user_aendern/"
aufrufe.
Wenn man
"http://localhost/admin/user_aendern"
(Kein Slash am Ende) aufruft wird die Seite zwar auch korrekt angezeigt, jedoch ändert sich die Adresszeile im Browser zu
"http://localhost/admin/user_aendern/?page=admin/user_aendern"

Warum und wie kann ich das unterbinden?

Meine htaccess sieht so aus:

  
RewriteEngine on  
  
RewriteCond %{QUERY_STRING} ^(.*)$  
RewriteRule ^(.*)$    index.php?page=$1&%1  

Die index.php ist scheinbar unwichtig, denn selbst wenn sie leer ist passiert der selbe Fehler.

Denke schon mal im Vor raus

  1. Ich hab ein ähnliches Problem. Könnte bitte mal jemand helfe?
    Danke

  2. Tach!

    Alle anfragen auf solche Seiten sollen über die index.php laufen und als GET Parameter die Seite mitbekommen.
    "http://localhost/admin/user_aendern/" -> "http://localhost/index.php?page=admin/user_aendern/"

    Dazu muss man nicht großartig Querystrings übergeben, die $_SERVER['REQUEST_URI'] steht auch so bereit.

    RewriteRule .* index.php

    Und davor noch die beiden RewriteCond zum Ausschließen von existierenden Dateien und Verzeichnissen setzen.

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

    Nun zum Problem. Wenn ich in der htaccess das festlege was ich will funktioniert alles nur solange ich genau
    "http://localhost/admin/user_aendern/"
    aufrufe. Wenn man
    "http://localhost/admin/user_aendern"
    (Kein Slash am Ende) aufruft wird die Seite zwar auch korrekt angezeigt, jedoch ändert sich die Adresszeile im Browser zu
    "http://localhost/admin/user_aendern/?page=admin/user_aendern"

    Nun, der Apache stellt fest, dass admin/user_aendern ein Verzeichnis ist und sagt dem Client, dass er nochmal kommen soll, aber mit / hintendran, damit relative Links in den Dokumenten ordentlich aufgelöst werden können. Hier kommt wohl auch noch das Rewrite ins Spiel, aber was da wie abläuft müsstest du mal im RewriteLog nachschauen, wenn dir das zugänglich ist. Man braucht da Admin-Rechte zum konfigurieren.

    RewriteRule ^(.*)$    index.php?page=$1&%1

    Reguläre Ausdrücke sind immer gierig. Ein * versucht so viele Zeichen wie möglich zu finden. Mit .* wird alles gefunden, von vorn bis hinten. Da extra noch ^ und $ anzugeben ist unnötig.

    dedlfix.

    1. Danke

      Nun, der Apache stellt fest, dass admin/user_aendern ein Verzeichnis ist und sagt dem Client, dass er nochmal kommen soll, aber mit / hintendran, damit relative Links in den Dokumenten ordentlich aufgelöst werden können. Hier kommt wohl auch noch das Rewrite ins Spiel, aber was da wie abläuft müsstest du mal im RewriteLog nachschauen, wenn dir das zugänglich ist. Man braucht da Admin-Rechte zum konfigurieren.

      aber schalte ich das rewritelog ein? Ich hab ein wenig gegoogelt und rumprobiert aber ich habs nicht hinbekommen. Meine einzigsten log Dateien die ich sehe sind:
      access.log
      error.log
      install.log
      httpd.pid (?)

      Ich hab übrigens XAMPP auf meinem PC

      1. Ich hab das Rewrite Log hinbekommen, jedoch kann ich den Fehler immer noch nicht finden. Hier das Log nachdem ich einmal
        "http://localhost/klassenadmin/saal_aendern"
        aufgerufen hab.

        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a3e130/initial] [perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/klassenadmin/saal_aendern/ -> klassenadmin/saal_aendern/  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a3e130/initial] [perdir D:/xampp/htdocs/] applying pattern '(.*)\\/$' to uri 'klassenadmin/saal_aendern/'  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace2] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a3e130/initial] [perdir D:/xampp/htdocs/] rewrite 'klassenadmin/saal_aendern/' -> 'index.php?page=klassenadmin/saal_aendern'  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a3e130/initial] split uri=index.php?page=klassenadmin/saal_aendern -> uri=index.php, args=page=klassenadmin/saal_aendern  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a3e130/initial] [perdir D:/xampp/htdocs/] add per-dir prefix: index.php -> D:/xampp/htdocs/index.php  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace2] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a3e130/initial] [perdir D:/xampp/htdocs/] strip document_root prefix: D:/xampp/htdocs/index.php -> /index.php  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace1] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a3e130/initial] [perdir D:/xampp/htdocs/] internal redirect with /index.php [INTERNAL REDIRECT]  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/klassenadmin/saal_aendern/index.php -> klassenadmin/saal_aendern/index.php  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] applying pattern '(.*)\\/$' to uri 'klassenadmin/saal_aendern/index.php'  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace1] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] pass through D:/xampp/htdocs/klassenadmin/saal_aendern/index.php  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/klassenadmin/saal_aendern/index.pl -> klassenadmin/saal_aendern/index.pl  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] applying pattern '(.*)\\/$' to uri 'klassenadmin/saal_aendern/index.pl'  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace1] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] pass through D:/xampp/htdocs/klassenadmin/saal_aendern/index.pl  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/klassenadmin/saal_aendern/index.cgi -> klassenadmin/saal_aendern/index.cgi  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] applying pattern '(.*)\\/$' to uri 'klassenadmin/saal_aendern/index.cgi'  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace1] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] pass through D:/xampp/htdocs/klassenadmin/saal_aendern/index.cgi  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/klassenadmin/saal_aendern/index.asp -> klassenadmin/saal_aendern/index.asp  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] applying pattern '(.*)\\/$' to uri 'klassenadmin/saal_aendern/index.asp'  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace1] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] pass through D:/xampp/htdocs/klassenadmin/saal_aendern/index.asp  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/klassenadmin/saal_aendern/index.shtml -> klassenadmin/saal_aendern/index.shtml  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] applying pattern '(.*)\\/$' to uri 'klassenadmin/saal_aendern/index.shtml'  
        [Mon Feb 10 02:15:38.570050 2014] [rewrite:trace1] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] pass through D:/xampp/htdocs/klassenadmin/saal_aendern/index.shtml  
        [Mon Feb 10 02:15:38.585671 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/klassenadmin/saal_aendern/index.html -> klassenadmin/saal_aendern/index.html  
        [Mon Feb 10 02:15:38.585671 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] applying pattern '(.*)\\/$' to uri 'klassenadmin/saal_aendern/index.html'  
        [Mon Feb 10 02:15:38.585671 2014] [rewrite:trace1] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] pass through D:/xampp/htdocs/klassenadmin/saal_aendern/index.html  
        [Mon Feb 10 02:15:38.585671 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/klassenadmin/saal_aendern/home.html -> klassenadmin/saal_aendern/home.html  
        [Mon Feb 10 02:15:38.585671 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] applying pattern '(.*)\\/$' to uri 'klassenadmin/saal_aendern/home.html'  
        [Mon Feb 10 02:15:38.585671 2014] [rewrite:trace1] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] pass through D:/xampp/htdocs/klassenadmin/saal_aendern/home.html  
        [Mon Feb 10 02:15:38.585671 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/klassenadmin/saal_aendern/home.htm -> klassenadmin/saal_aendern/home.htm  
        [Mon Feb 10 02:15:38.585671 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] applying pattern '(.*)\\/$' to uri 'klassenadmin/saal_aendern/home.htm'  
        [Mon Feb 10 02:15:38.585671 2014] [rewrite:trace1] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300f8/subreq] [perdir D:/xampp/htdocs/] pass through D:/xampp/htdocs/klassenadmin/saal_aendern/home.htm  
        [Mon Feb 10 02:15:38.585671 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300b8/initial/redir#1] [perdir D:/xampp/htdocs/] strip per-dir prefix: D:/xampp/htdocs/index.php -> index.php  
        [Mon Feb 10 02:15:38.585671 2014] [rewrite:trace3] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300b8/initial/redir#1] [perdir D:/xampp/htdocs/] applying pattern '(.*)\\/$' to uri 'index.php'  
        [Mon Feb 10 02:15:38.585671 2014] [rewrite:trace1] [pid 20476:tid 1652] mod_rewrite.c(468): [client ::1:61448] ::1 - - [localhost/sid#23346a8][rid#2a300b8/initial/redir#1] [perdir D:/xampp/htdocs/] pass through D:/xampp/htdocs/index.php  
        
        

        htaccess:

        RewriteEngine on  
        #RewriteCond %{QUERY_STRING} ^(.*)$  
        RewriteRule (.*)\/$    index.php?page=$1&%1
        
        1. Hallo,

          ich bins nochmal ganz verwirrt. Ich hab gerade germerkt das im Google Chrome alles so funktioniert wie ich es will.

          "localhost/klassenadmin/saal_aendern" -> "localhost/klassenadmin/saal_aendern/"

          und richtige Seite xD

          Jetzt versteh ich garnix mehr!??

          1. Tach!

            Jetzt versteh ich garnix mehr!??

            Du hast ja jetzt gegenüber dem Eingangsposting Änderungen vorgenommen. Ist denn der Fehler jetzt immer noch genauso? Und hast du mal meinen Vorschlag probiert?

            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule .* index.php [QSA]

            Ich hab noch ein QSA angehängt, damit der urspüngliche Querystring auch noch angehängt wird. Das ist einfach und bewährt. In einigen Apache-Konfigurationen kann man das sogar noch zu FallbackResource index.php verkürzen, aber das obige sollte in jedem Fall gehen.

            Zu deinem Rewritelog-Auszug kann ich sagen, dass beim Rewriting eine URL mit / hintendran ankommt. Die wird intern umgeschrieben zu index.php mit Parameter hintendran. Den nächste Teil hab ich so noch nicht gesehen. Da werden anscheinend alle DirectoryIndex-Dokumente durchgenommen. Aber warum, kann ich nicht sagen. Im dritten Teil kommt der interne Rewrite von eben erneut durch die Regeln, das ist normal. Da aber kein / hintendranhängt, wird die RewriteRule nicht ausgeführt.

            dedlfix.

            1. Danke für deine Hilfe. Aber wie so oft...

              Da es ja im Chrome funktioniert hab ich mal überlegt im Firefox den Cache zu löschen und jetzt gehts auch dort. Warum es im Firefox einmal nicht ging und er sich das gemerkt hat weiß ich nicht aber ist ja auch egal.