Ute Möller: Weiterleitung (zu kompliziert für den Betreff)

Hallo

Nun habe ich nochmal ein Anliegen.
Ich möchte gerne per .htaccess-Datei etwas umleiten.

Die aufgerufene URL lautet:
http://example.org/index.htm?/Artikel/kbl003.shtml

Umgeleitet soll werden auf:
http://example.org/produkte/kbl003.php

Das möchte ich nicht nur für diesen einen Fall haben.
Sondern immer wenn jemand eine .shtml Datei unter http://example.org/index.htm?/Artikel/ aufruft, soll diese umgeleitet werden auf einen .php Datei gleichen Namens unter http://example.org/produkte/

Oder anders ausgedrückt:
Aus http://example.org/index.htm?/Artikel/kbl003.shtml soll der Teil "index.htm?/Artikel" gegen "produkte" getauscht werden.
Und das "shtml" soll gegen "php" getauscht werden.

Bitte entschuldigt die komplizierte Beschreibung, aber ich wies nicht, wie ich sonst besser erklären kann.
Ist sowas per .htaccess-datei machbar?
Und wenn ja, geht das relátiv einfach?
Ich verstehe davon leider nicht sehr viel und würde mich darum über Hilfe sehr freuen.

Gruß
Ute

  1. Hallo, Ute!

    Die Dokumentation von mod_rewrite sollte Dir weiterhelfen. Das ganze sieht dann im Effekt ungefähr so aus:

    RewriteRule  /index.htm?/Artikel/(.*)  /produkte/$1  [L]

    Gruß, LX

    --
    RFC 1925, Satz 3: Mit ausreichendem Schub fliegen Schweine ganz wunderbar. (...)
    1. Hi,

      Das ganze sieht dann im Effekt ungefähr so aus:

      RewriteRule  /index.htm?/Artikel/(.*)  /produkte/$1  [L]

      Nein - das Fragezeichen leitet den Querystring ein, und den berücksichtigt eine RewriteRule aber nicht.

      http://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#rewriterule:
      “If you wish to match against the hostname, port, or query string, use a RewriteCond with the %{HTTP_HOST}, %{SERVER_PORT}, or %{QUERY_STRING} variables respectively.”

      MfG ChrisB

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

        Danke Euch beiden für Eure Tipps.
        Ich habe mir das mal durchgelesen.
        Aber ich fürchte, dass mich das leider stark überfordert.
        Damit komme ich nicht klar, weil ich von diesen Server-Dingen nicht viel verstehe.

        Gruß
        Ute

        1. Wer hosted denn Deinen Server? In den meisten Fällen gibt es a) einfache Interfaces, die solche Regeln automatisch erstellen und b) einen Support, der bei derartigen Fragen durchaus Bescheid wissen dürfte.

          Gruß, LX

          --
          RFC 1925, Satz 3: Mit ausreichendem Schub fliegen Schweine ganz wunderbar. (...)
          1. Hallo LX,

            Wer hosted denn Deinen Server? In den meisten Fällen gibt es a) einfache Interfaces, die solche Regeln automatisch erstellen und b) einen Support, der bei derartigen Fragen durchaus Bescheid wissen dürfte.

            a) bin ich der Ansicht, dass es einem Forum gut tut, solche Probleme gemeinsam zu lösen,
            b) sind mir in meinem durchaus beschränkten Erfahrungsschatz noch keine solchen Interfaces über den Weg gelaufen,
            c) leisten manche (viele?) Hoster *keinen* Support für mod_rewrite-Probleme.

            Freundliche Grüße

            Vinzenz

            1. Hallo,

              a) bin ich der Ansicht, dass es einem Forum gut tut, solche Probleme gemeinsam zu lösen,

              sehe ich auch so (trotzdem ist auch eine Anfrage beim Support natürlich kein Fehler).

              b) sind mir in meinem durchaus beschränkten Erfahrungsschatz noch keine solchen Interfaces über den Weg gelaufen,
              c) leisten manche (viele?) Hoster *keinen* Support für mod_rewrite-Probleme.

              d) sind bei manchen Hostern die Support-Mitarbeiter zwar gut im Umgang mit Menschen, haben aber oft auch nicht mehr Fachwissen als der Kunde selbst und können nicht mehr, als Standardantworten in ein Formular zu kopieren oder abzulesen.

              Dieses Phänomen ist meiner Erfahrung nach leider nicht auf Webhoster beschränkt, sondern gängige Praxis bei den Support-Abteilungen vieler Firmen. Fachlich geschultes Personal ist da eine rühmliche Ausnahme.

              Ciao,
               Martin

              --
              Nur kleine Geister brauchen Ordnung. Genies beherrschen das Chaos.
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        2. Hallo Ute,

          Danke Euch beiden für Eure Tipps.
          Ich habe mir das mal durchgelesen.
          Aber ich fürchte, dass mich das leider stark überfordert.

          an Aufgaben kann man wachsen.

          Damit komme ich nicht klar, weil ich von diesen Server-Dingen nicht viel verstehe.

          Du willst URLs umschreiben, ganz genau dafür ist mod_rewrite gemacht, wie Dir LX gesagt hat.

          So schwierig ist das ganze gar nicht - vorausgesetzt, Dir steht mod_rewrite zur Verfügung. Heute gehört das durchaus zur Standardausstattung eines Paketes. Danach sind es im Ganzen aller Voraussicht nach drei oder vier Zeilen in Deiner .htaccess-Datei, wovon die ersten einfach

          Options FollowSymLinks             # falls nötig
             RewriteEngine on

          lauten, siehe Kasten "Note: Enabling rewrites in per-directory context" in der http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule.

          Wenn wir uns Deine Aufgabenstellung nochmals anschauen:

          Die aufgerufene URL lautet:
          http://example.org/index.htm?/Artikel/kbl003.shtml

          Umgeleitet soll werden auf:
          http://example.org/produkte/kbl003.php

          dann haben wir:

          http://example.org/index.htm

          als aufgerufene Ressource und

          /Artikel/kbl003.shtml

          als Querystring. Das Fragezeichen trennt Ressource von Querystring, gehört also nicht zu diesem selbst. Chris hat Dich und LX darauf hingewiesen, dass man eine Rewrite-Condition benötigt, um auf den Inhalt des Query-Strings zu reagieren:

          RewriteCond %{QUERY_STRING} **RegExp, der den Aufbau matcht und den gewünschten Teil einfängt**

          d.h. Du möchtest
              den Beginn des Querystring,
              gefolgt von der Zeichenfolge /Artikel/
              gefolgt von dem gewünschten Teil, der aus verschiedenen Zeichen (darunter
              kein Slash) besteht, den Du einfangen musst.
              gefolgt von der Zeichenfolge .shtml,
              gefolgt dem Ende des Querystrings haben.

          Ich weiß nicht wie gut Deine RegExp-Kenntnisse sind und ob Du das hinbekommst. Wenn nicht, frage einfach nach.

          Danach kommen wir zur RewriteRule, diese ist sehr einfach:

          RewriteRule ^index.htm$ /produkte/%1.php?

          wobei Du mit %1 auf das zugreifst, was der RegExp in der Rewrite-Condition eingefangen hat (der Teil zwischen /Artikel/ und .shtml). Das Fragezeichen zum Schluss sorgt dafür, dass der Originalquerystring nicht erneut angehängt wird. ^ und $ haben in regulären Ausdrücken eine besondere Bedeutung, siehe Reguläre Ausdrücke (Wikipedia).

          Freundliche Grüße

          Vinzenz