Ankündigung

Einklappen
Keine Ankündigung bisher.

Kein GET mit Rewrite?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kein GET mit Rewrite?

    Hallo,

    ich stehe gerade vor folgendem Problem:

    An die Datei index.php soll per GET ein Parameter angehängt werden, z. B. so:
    index.php?test=parameter

    Wenn ich das ganze jetzt folgendermaßen direkt aufrufe, geht es problemlos:
    www.example.com/index.php?test=parameter

    ABER wenn ich das ganze jetzt durch eine per Rewrite veränderte URL aufrufe:
    http://www.example.com/veraenderung/...test=parameter

    ...dann wird mir zwar richtigerweise die index.php ganz normal angezeigt, aber ich habe kein Zugriff auf den gesetzten GET-Parameter!

    Was kann ich dagegen tun?

    MfG
    Michael

  • #2
    Kein GET benutzen!

    Wie sieht den die Veränderung aus(Code)?

    (Eigentlich ist das kein PHP-Thema, es sei denn du willst dich über andere Techniken informieren.)

    Kommentar


    • #3
      Die Veränderung sieht so aus:

      Code:
      RewriteEngine on
      RewriteRule ^((de|en))/? index.php?language=$1 [L]
      Dann müsste ich evtl. noch eine extra Bedingung einbauen, die erkennt, dass diese GET-Anweisung aufgerufen wird und diese dann an das Script im Hintergrund weitergibt, oder?

      MfG
      Michael

      Kommentar


      • #4
        Deine Rewrite Rule sucht sich einen Sprachparameter /en/ oder /de/ und formatiert ihn in einen GET Parameter um. Dabei bleiben anscheinend andere GET Befehle auf der Strecke.
        Du musst also entweder die GET Parameter am Ende des Links weitergeben oder diese auch gleich so umschreiben, dass sie solche "Pseudo-Unterordner" werden wie bereits bei deinem Sprachparameter.
        Da findet sich sicher einiges mit Google.

        Kommentar


        • #5
          Genau, diese Idee hatte ich nun auch gerade.
          Ich fange nun mit %{REQUEST_URI} die aufgerufene Seite ab und hänge daran den language-Parameter:

          Code:
          RewriteEngine on
          RewriteRule ^((de|en))/? %{REQUEST_URI}/?language=$1 [L]
          Aber leider meldet mein Apache Error500:
          Code:
          [Sun Dec 14 13:51:03 2008] [error] [client 127.0.0.1] File does not exist: D:/Programme/wamp/www/en
          Das bekomme ich, wenn ich www.example.com/en/ aufrufe!
          Ich denke mal, dass er hier das Problem hat, dass %{REQUEST_URI} leer ist und daher den Language-Parameter nirgends anhängen kann!

          Nur wie bringe ich ihn dann dazu, dass er mir immer in diesem Fall, wenn keine andere Datei angefordert wurde, die index.php zu nehmen?

          MfG
          Michael

          Kommentar


          • #6
            mod_rewrite - Apache HTTP Server
            'qsappend|QSA' (query string append)
            This flag forces the rewrite engine to append a query string part of the substitution string to the existing string, instead of replacing it. Use this when you want to add more data to the query string via a rewrite rule.

            Kommentar


            • #7
              In deinem Problem müsste die REQUEST_URI=www.example.com/en/ sein, sodass mod_rewrite das ganze wie folgt umsetzt: www.example.com/en/?language=en foglich müsstest du in dem Ordner /en/ eine index.* haben!

              An sich würde (.*) völlig ausreichen für dein Problem:
              Code:
              RewriteEngine on
              RewriteRule ^(.*)/(de|en)/(.*)? $1/$3?language=$2 [L]
              Das ganze mit den Zusatz %{QUERY_STRING} müsste dann sogar einen zusätzlichen Query-String möglich machen:
              Code:
              RewriteEngine on
              RewriteRule ^(.*)/(de|en)/(.*)? $1/$3?language=$2&%{QUERY_STRING} [L]
              In diesem Fall bin ich mir bei den & nicht sicher, weil ich mir nicht sicher bin, was %{QUERY_STRING} für einen String liefert.

              Dannoch müsste mit dem obigen folgendes möglich sein:
              Code:
              www.example.com/en/index.php => www.example.com/index.php?language=en
              www.example.com/de/ => http://www.example.com/?language=de

              Kommentar


              • #8
                Vielen Dank euch beiden für die Tipps!

                Ich habe beide Tipps in folgenden Code umgewandelt:

                Code:
                RewriteEngine on
                RewriteRule ^((de|en))/(.*)? $2/?language=$1 [QSA,L]
                Aber leider bekomme ich nun wieder einen Error500:
                Code:
                [Sun Dec 14 18:26:03 2008] [error] [client 127.0.0.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
                MfG
                Michael

                Kommentar


                • #9
                  Dann setz mal RewriteLog und RewriteLogLevel und schau Dir an, was mod_rewrite macht.

                  Kommentar


                  • #10
                    Vielen Dank, hier die Log-Ausgaben.

                    Aufruf von Example Web Page

                    Code:
                    127.0.0.1 - - [14/Dec/2008:20:24:37 +0100] [localhost/sid#6b5148][rid#f3bd00/initial] (3) [perdir D:/Programme/wamp/www/] strip per-dir prefix: D:/Programme/wamp/www/ -> 
                    127.0.0.1 - - [14/Dec/2008:20:24:37 +0100] [localhost/sid#6b5148][rid#f3bd00/initial] (3) [perdir D:/Programme/wamp/www/] applying pattern '^((de|en))/(.*)?' to uri ''
                    127.0.0.1 - - [14/Dec/2008:20:24:37 +0100] [localhost/sid#6b5148][rid#f3bd00/initial] (1) [perdir D:/Programme/wamp/www/] pass through D:/Programme/wamp/www/
                    127.0.0.1 - - [14/Dec/2008:20:24:37 +0100] [localhost/sid#6b5148][rid#f4cd30/subreq] (3) [perdir D:/Programme/wamp/www/] strip per-dir prefix: D:/Programme/wamp/www/index.php -> index.php
                    127.0.0.1 - - [14/Dec/2008:20:24:37 +0100] [localhost/sid#6b5148][rid#f4cd30/subreq] (3) [perdir D:/Programme/wamp/www/] applying pattern '^((de|en))/(.*)?' to uri 'index.php'
                    127.0.0.1 - - [14/Dec/2008:20:24:38 +0100] [localhost/sid#6b5148][rid#f4cd30/subreq] (1) [perdir D:/Programme/wamp/www/] pass through D:/Programme/wamp/www/index.php
                    Aufruf von www.example.com/de/
                    Code:
                    127.0.0.1 - - [14/Dec/2008:20:26:11 +0100] [localhost/sid#6b5148][rid#fc8f18/initial] (3) [perdir D:/Programme/wamp/www/] strip per-dir prefix: D:/Programme/wamp/www/de -> de
                    127.0.0.1 - - [14/Dec/2008:20:26:11 +0100] [localhost/sid#6b5148][rid#fc8f18/initial] (3) [perdir D:/Programme/wamp/www/] applying pattern '^((de|en))/(.*)?' to uri 'de'
                    127.0.0.1 - - [14/Dec/2008:20:26:11 +0100] [localhost/sid#6b5148][rid#fc8f18/initial] (1) [perdir D:/Programme/wamp/www/] pass through D:/Programme/wamp/www/de
                    Komischerweise bekomme ich hier nun einen Error 404, kein Error 500 mehr, aber ich verstehe nicht, wie er hier das ganze nur in /de/ umwandeln kann, er sollte das doch eigentlich mit der Bedingung in meinem letzten Post in einen GET-Parameter umwandeln!

                    MfG
                    Michael

                    Kommentar


                    • #11
                      [MOD] Thread moved…

                      Kommentar

                      Lädt...
                      X