Silke: Schönere Adresse (URL)

Servus!

Weiß hier jemand, wie man erreichen kann, dass meineseite.de/index.php?artikelnummer=123 unter meineseite.de/artikelnummer/123/ erreichbar ist und bei Eingabe der ersten Variante eine Weiterleitung auf die zweite erfolgt?

Schöne Grüße aus Köln.

Silke

  1. Hi,

    z.B. mit einer .htaccess.

    Kommt auf zur Verfügung stehendes an.

    ~dave

    1. Servus Dave!

      Eine .htaccess-Datei kann ich benutzen. Was muss ich denn da hineinschreiben?

      Schöne Grüße

      Silke

      1. Eine .htaccess-Datei kann ich benutzen. Was muss ich denn da hineinschreiben?

        RewriteCond %{REQUEST_FILENAME} -f [OR]
        RewriteCond %{REQUEST_FILENAME} -d [OR]
        RewriteCond %{REQUEST_FILENAME} -l
        RewriteRule .* - [L]

        Platz für weitere Sonderregeln

        RewriteRule .* index.php [L]

        oder aber:

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

        Das sorgt aber lediglich dafür, dass sämticher Traffic auf ein zentrales Script umgeschrieben wird - dahinter muss natürlich ein PHP-Script lauern, welches den gegebenen Pfad zerlegt und die eigentliche Ressouce ausliest (bzw. mit den richtigen Parametern an das betreffende Script durchreicht).

        1. Servus Suit!

          Vielen Dank für deine Mühe.

          So ganz verstehe ich nicht, was du mit zentralem Script meinst. Wenn meineseite.de/index.php?artikelnummer=123 ordnungsgemäß funktioniert, muss ich doch am PHP-Code nichts mehr ändern, sondern nur noch dafür sorgen, dass die Adresse (URL) umgeschrieben wird, oder verstehe ich das falsch?

          Schöne Grüße

          Silke

          1. So ganz verstehe ich nicht, was du mit zentralem Script meinst. Wenn meineseite.de/index.php?artikelnummer=123 ordnungsgemäß funktioniert, muss ich doch am PHP-Code nichts mehr ändern, sondern nur noch dafür sorgen, dass die Adresse (URL) umgeschrieben wird, oder verstehe ich das falsch?

            Ja. Dein Script muss auch deine schönen URLs produzieren.

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
  2. Hi,

    Weiß hier jemand, wie man erreichen kann, dass meineseite.de/index.php?artikelnummer=123 unter meineseite.de/artikelnummer/123/ erreichbar ist

    Stichwort: mod_rewrite

    und bei Eingabe der ersten Variante eine Weiterleitung auf die zweite erfolgt?

    Eine Möglichkeit: Original(!) angeforderte Adresse im Script hinsichtlich des Formats auswerten, und ggf. per Location-Header umleiten.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Servus Chris!

      Könntest du es mir etwas genauer erklären?

      Schöne Grüße

      Silke

      1. Hi,

        Könntest du es mir etwas genauer erklären?

        Wenn du hier ein Stichwort genannt bekommst, dann erwarten wir von dir, dass du zunächst versuchst, dich selber zu informieren.

        Und gerade dieses Thema ist eins, das im WWW schon sehr breit behandelt wurde.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Servus Chris!

          Die Beispiele, die ich gefunden habe, trafen entweder nicht auf mein Vorhaben zu oder haben nicht funktioniert.

          Schöne Grüße

          Silke

          1. Hi,

            Die Beispiele, die ich gefunden habe, trafen entweder nicht auf mein Vorhaben zu oder haben nicht funktioniert.

            Beispiele sind *Beispiele*, weil sie dir beim Erlangen des nötigen Verständnis helfen sollen, um deine individuelle Anforderung anschließend selber umsetzen zu können - nicht um in jedem Fall gleich die fertige Lösung zu liefern.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    2. und bei Eingabe der ersten Variante eine Weiterleitung auf die zweite erfolgt?

      Warum das denn, das nimmt sprechenden URLs reglichen sinn - das ist idR. für kurze weiterleitung geeignet:

      z.B. example.com/gewinnspiel leitet zu example.com/de/mitmachen/gewinnspiele/toaster_2010 weiter und ein paar monate später auf example.com/de/mitmachen/gewinnspiele/moped_2010

      1. Hi,

        und bei Eingabe der ersten Variante eine Weiterleitung auf die zweite erfolgt?

        Warum das denn

        Schau dir bitte an, worauf sich „erste Variante“ bezog.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      2. Servus Suit!

        Warum das denn, das nimmt sprechenden URLs reglichen sinn - das ist idR. für kurze weiterleitung geeignet:

        Da hast du mich offenbar missverstanden. Bei Eingabe von meineseite.de/index.php?artikelnummer=123 soll auf meineseite.de/artikelnummer/123/ weitergeleitet werden.

        Schöne Grüße

        Silke

        1. Warum das denn, das nimmt sprechenden URLs reglichen sinn - das ist idR. für kurze weiterleitung geeignet:

          Da hast du mich offenbar missverstanden. Bei Eingabe von meineseite.de/index.php?artikelnummer=123 soll auf meineseite.de/artikelnummer/123/ weitergeleitet werden.

          Warum denn das?
          Planst du Kreiselverkehr?

          mfg Beat

          --
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
          1. Hi,

            Da hast du mich offenbar missverstanden. Bei Eingabe von meineseite.de/index.php?artikelnummer=123 soll auf meineseite.de/artikelnummer/123/ weitergeleitet werden.

            Warum denn das?
            Planst du Kreiselverkehr?

            Seid ihr alle schwer von Begriff heute ...?

            Silke möchte, dass nur die Adresse /artikelnummer/123/ für die Ressource verwendet wird. Sollte der Client also /index.php?artikelnummer=123 anfordern, auf Grund veralteter Links o.ä., dann soll explizit ein Redirect auf /artikelnummer/123/ stattfinden.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Silke möchte, dass nur die Adresse /artikelnummer/123/ für die Ressource verwendet wird. Sollte der Client also /index.php?artikelnummer=123 anfordern, auf Grund veralteter Links o.ä., dann soll explizit ein Redirect auf /artikelnummer/123/ stattfinden.

              Ja - aber das spielt doch keine Rolle - sämtlichen Traffic der irgendwie daherkommt auf _ein_ zentrales Script zusammenleiten und dort auswerten und weiterdelegieren und ggf. umleiten.

              Die Deluxe-Variante ist, dass man in der Rewrite-Rule schon abfängt, was "schön" ist und nicht mehr umschreibt.

              1. Hi,

                Silke möchte, dass nur die Adresse /artikelnummer/123/ für die Ressource verwendet wird. Sollte der Client also /index.php?artikelnummer=123 anfordern, auf Grund veralteter Links o.ä., dann soll explizit ein Redirect auf /artikelnummer/123/ stattfinden.

                Ja - aber das spielt doch keine Rolle - sämtlichen Traffic der irgendwie daherkommt auf _ein_ zentrales Script zusammenleiten und dort auswerten und weiterdelegieren und ggf. umleiten.

                Klar, wenn man gerne mit dem Holzhammer spielt ... dann kann man einfach „alles“ umschreiben.

                Man kann aber seine RewriteRule auch mit einem spezifischeren Ausdruck formulieren - so dass erstens nur Adressen nach dem gewünschten Muster überhaupt abgefangen werden, und zweitens die Befüllung der Parameter gleich an dieser Stelle erledigt wird.

                Die Deluxe-Variante ist, dass man in der Rewrite-Rule schon abfängt, was "schön" ist und nicht mehr umschreibt.

                Wenn man nicht mehr umschreibt, dann muss man die Extraktion der Parameter anschließend im Script machen. Finde ich nicht besonders deluxisch.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                1. Klar, wenn man gerne mit dem Holzhammer spielt ... dann kann man einfach „alles“ umschreiben.

                  Man kann aber seine RewriteRule auch mit einem spezifischeren Ausdruck formulieren - so dass erstens nur Adressen nach dem gewünschten Muster überhaupt abgefangen werden, und zweitens die Befüllung der Parameter gleich an dieser Stelle erledigt wird.

                  Wenn die Ziele nicht existieren folgt aber dann eine Umleitung auf eine nicht existierende Seite die dann erstrecht zu einer 404 oder 410-Seite führt.

                  Ich halte es daher für schlauer, von einem Script prüfen zu lassen ob die  Ressource überhaupt existiert und dann entsprechend zu reagieren - das kostet zwar etwas Rechenzeit, die fällt aber selbst bei großen Sites nicht wirklich ins Gewicht wenn man bei der Hardware nicht gespart hat.

                  1. Hi,

                    Wenn die Ziele nicht existieren folgt aber dann eine Umleitung auf eine nicht existierende Seite die dann erstrecht zu einer 404 oder 410-Seite führt.

                    Wieso Umleitung?

                    Ich halte es daher für schlauer, von einem Script prüfen zu lassen ob die  Ressource überhaupt existiert und dann entsprechend zu reagieren

                    Das muss das Script doch sowieso machen.
                    Wenn alles nach dem Muster /abc/123 akzeptiert wird, muss es trotzdem prüfen, ob konkret zu /gje/374 überhaupt existiert bzw. entsprechende Daten dazu vorliegen.

                    Das ist aber noch lange kein (zwingender) Grund, mit dem Holzhammer *alle* Anfragen an das Script umzuleiten, wenn die konkrete Anfrage bspw. /786/xcz lautet, und damit noch nicht mal dem Muster entspricht.

                    MfG ChrisB

                    --
                    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                    1. Hi,

                      Wenn die Ziele nicht existieren folgt aber dann eine Umleitung auf eine nicht existierende Seite die dann erstrecht zu einer 404 oder 410-Seite führt.

                      Wieso Umleitung?

                      Ich kenn' mich bald garnicht mehr aus.

                      example.com/index.php?foo=bar soll nach example.com/foo/bar umgeleitet werden - oder sehe ich das falsch?

                      Wenn aber weder example.com/index.php?foo=bar noch example.com/foo/bar gültige Ressourcen sind, gibts 404 oder 410.

                      Das hat zur folge

                      Request: example.com/index.php?foo=bar
                      Response: 301 example.com/foo/bar
                      Request: example.com/foo/bar
                      Response: 404 example.com/foo/bar

                      Wird das über ein zentrales Script gesteuert, könnte man das so machen:

                      Request: example.com/index.php?foo=bar
                      Response: 404 example.com/index.php?foo=bar

                      Das muss das Script doch sowieso machen.

                      Aber erst später nach dem Ping-Pong das nicht sein muss.

                      Das ist aber noch lange kein (zwingender) Grund, mit dem Holzhammer *alle* Anfragen an das Script umzuleiten, wenn die konkrete Anfrage bspw. /786/xcz lautet, und damit noch nicht mal dem Muster entspricht.

                      Das meinte ich mit der "Deluxe-Variante" - wenn man ein Muster 100%ig sicher ausschließen/einschließen kann, kann man natürlich gleich in der Umschreib-Regel darauf reagieren.

                      Woher willst du bei diesen Requests wissen, ob die Artikelnummer tatsächlich exstiert? Bei einem Shop mit 20 Artikel mag man das noch festlegen können bei 20.000 Artikeln muss man vorher schon in einer Datenbank nachschauen.

                      example.com/artikelnummer/456
                      example.com/artikelnummer/789
                      example.com/artikelnummer/012
                      example.com/index.php?artikelnummer=456
                      example.com/index.php?artikelnummer=789
                      example.com/index.php?artikelnummer=012

                      1. Hi,

                        example.com/index.php?foo=bar soll nach example.com/foo/bar umgeleitet werden - oder sehe ich das falsch?

                        In dem Fall, dass das eine existierende Ressource darstellt, ja.

                        Wenn aber weder example.com/index.php?foo=bar noch example.com/foo/bar gültige Ressourcen sind, gibts 404 oder 410.

                        Ja. Das hat dann das Script zu entscheiden, dass zum Wert bar für den Parameter foo keine Daten findet.

                        Request: example.com/index.php?foo=bar
                        Response: 301 example.com/foo/bar
                        Request: example.com/foo/bar
                        Response: 404 example.com/foo/bar

                        Wird das über ein zentrales Script gesteuert, könnte man das so machen:

                        Request: example.com/index.php?foo=bar
                        Response: 404 example.com/index.php?foo=bar

                        Das muss das Script doch sowieso machen.

                        Aber erst später nach dem Ping-Pong das nicht sein muss.

                        /foo/bar entspricht dem Muster, wird zu ?foo=bar umgeschrieben.

                        Dem Script, das damit aufgerufen wird, ist es erst mal egal, ob es mittels /foo/bar oder ?foo=bar aufgerufen wurde - es schaut erst mal nach, ob es zum Wert bar für Parameter foo Daten findet.
                        Wenn nein, 404 - egal unter welcher Adresse aufgerufen.

                        Wenn Daten gefunden - dann direkte Anzeige, wenn unter /foo/bar aufgerufen; Umleitung auf /foo/bar, wenn die „veraltete“ Adress-Version ?foo=bar verwendet wurde.

                        Das meinte ich mit der "Deluxe-Variante"

                        Aha, das klang für mich anders - insb. mit deinem vorherigen Pauschal-Vorschlag.

                        Woher willst du bei diesen Requests wissen, ob die Artikelnummer tatsächlich exstiert? Bei einem Shop mit 20 Artikel mag man das noch festlegen können bei 20.000 Artikeln muss man vorher schon in einer Datenbank nachschauen.

                        Natürlich schaut man das in der Datenbank nach. Ich habe nichts gegenteiliges behauptet.

                        MfG ChrisB

                        --
                        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            2. Silke möchte, dass nur die Adresse /artikelnummer/123/ für die Ressource verwendet wird. Sollte der Client also /index.php?artikelnummer=123 anfordern, auf Grund veralteter Links o.ä., dann soll explizit ein Redirect auf /artikelnummer/123/ stattfinden.

              Soso, ein Webformular ist dann also ein veralteter Link...

              Darf ich dir sagen, dass das Ziel einer Umschreibung niemals veraltet sein kann?

              mfg Beat

              --
              ><o(((°>           ><o(((°>
                 <°)))o><                     ><o(((°>o
              Der Valigator leibt diese Fische
              1. Hi,

                Silke möchte, dass nur die Adresse /artikelnummer/123/ für die Ressource verwendet wird. Sollte der Client also /index.php?artikelnummer=123 anfordern, auf Grund veralteter Links o.ä., dann soll explizit ein Redirect auf /artikelnummer/123/ stattfinden.

                Soso, ein Webformular ist dann also ein veralteter Link...

                Was laberst du denn jetzt hier zusammenhanglos von irgendwelchen „Webformularen“?

                Darf ich dir sagen, dass das Ziel einer Umschreibung niemals veraltet sein kann?

                Es ging nicht um das Ziel, sondern den „Start“.

                *Wenn* früher auf /index.php?artikelnummer=123 verlinkt wurde, dann sind darauf vermutlich noch irgendwo externe Referenzierungen darauf vorhanden.
                Jetzt soll als Adresse aber einheitlich nur noch /artikelnummer/123/ verwendet werden. Externe Referenzierungen hat man aber nicht unter Kontrolle - also besteht der verständliche Wunsch, ggf. doch noch hereinkommende Anfragen nach /index.php?artikelnummer=123 zu erkennen, und per Redirect auf /artikelnummer/123/ umzuleiten, damit der Client die neue, „richtige“ Adresse mitgeteilt bekommt und anzeigen kann.

                Können wir das Thema damit jetzt abschließen - oder hast du weitere amüsante Begriffstutzigkeiten auf Lager?

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  3. @@Silke:

    nuqneH

    Weiß hier jemand, wie man erreichen kann, dass meineseite.de/index.php?artikelnummer=123 unter meineseite.de/artikelnummer/123/ erreichbar ist

    meineseite.de ist deine Seite?

    Wenn nicht, verwende für Beipiele die in [RFC2606] vorgesehenen Domainnamen example.com, example.net etc.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)