Sven: mod_rewrite Problem

Hi,

ich muss folgende URLs umwandeln

www.domain.de/?/meine_datei.html

in

www.domain.de/meine_datei.html

RewriteRule ^(.*)/?/(.*) /$2 [R=301,L]

Hat eider nichts gebracht.

Jemand eine Idee?

Gruß Sven

  1. Hi,

    ich muss folgende URLs umwandeln

    www.domain.de/?/meine_datei.html

    in

    www.domain.de/meine_datei.html

    RewriteRule ^(.*)/?/(.*) /$2 [R=301,L]

    Hat eider nichts gebracht.

    RewriteRule betrachtet ausschließlich die path-Komponente der URL.

    Wenn du auf den Query String matchen willst, musst du dazu eine vorgeschaltete RewriteCond nutzen.

    MfG ChrisB

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

      ich muss folgende URLs umwandeln

      www.domain.de/?/meine_datei.html

      in

      www.domain.de/meine_datei.html

      RewriteRule ^(.*)/?/(.*) /$2 [R=301,L]

      Wenn du auf den Query String matchen willst, musst du dazu eine vorgeschaltete

      ich versteh' ja nicht wirklich etwas davon, aber ...
      muss ein Query String nicht üblicherweise die Form "?[var]=[val]" haben (wobei mehrere Parameter-Werte-Paare mit einem '&' getrennt werden)?

      Ist die vom OP angegebene ursprüngliche URL in der Form überhaupt eine gültige?
      Und falls ja, müsste das '?' nicht escaped werden?

      Gruß Gunther

      1. @@Gunther:

        nuqneH

        muss ein Query String nicht üblicherweise die Form "?[var]=[val]" haben

        Nein. [RFC3986 §3.4]

        Key-Value-Paare sind üblich in Querys, aber nicht zwingend.

        (wobei mehrere Parameter-Werte-Paare mit einem '&' getrennt werden)?

        '&' ist üblich als Trennzeichen, aber ziemlich dumm. [HTML401 §B.2.2]

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
        1. @@Gunnar, dedlfix, Sven:

          nuqneH

          Ich danke euch für die Erklärung(en) und hilfreichen Links - wieder etwas "schlauer" als vorher! ;-)

          Besten Dank!

          Gruß Gunther

      2. Hi,

        ich muss folgende URLs umwandeln

        www.domain.de/?/meine_datei.html

        in

        www.domain.de/meine_datei.html

        RewriteRule ^(.*)/?/(.*) /$2 [R=301,L]

        Wenn du auf den Query String matchen willst, musst du dazu eine vorgeschaltete

        ich versteh' ja nicht wirklich etwas davon, aber ...
        muss ein Query String nicht üblicherweise die Form "?[var]=[val]" haben (wobei mehrere Parameter-Werte-Paare mit einem '&' getrennt werden)?

        Ist die vom OP angegebene ursprüngliche URL in der Form überhaupt eine gültige?
        Und falls ja, müsste das '?' nicht escaped werden?

        Gruß Gunther

        Hi,

        das sind bereits per rewrite umgewandelte URLs.
        das Problem ist halt das dass CMS geupdatet wurde und dieses diese art von URLs nicht mehr erkennt. Da google diese Links aber alle so aufgenommen hat, muss ich das umleiten.

      3. Tach!

        ich versteh' ja nicht wirklich etwas davon, aber ...
        muss ein Query String nicht üblicherweise die Form "?[var]=[val]" haben (wobei mehrere Parameter-Werte-Paare mit einem '&' getrennt werden)?

        Nein. Dass Querystrings üblicherweise so aussehen, liegt daran, dass Browser sie in der Form aus den Formularelementen generieren. Aber eine generelle Regel, wie der Querystring aufgebaut sein muss ist nicht definiert. Übrigens hat HTML 4.01 mal empfohen vom & wegzugehen auf auf das Semikolon ; umzusteigen, um Probleme mit dem Escaping (&entity;) zu umgehen. Aber das hat keiner ernsthaft befolgt, würde das doch viele bestehende Anwendungen behindern.

        Ist die vom OP angegebene ursprüngliche URL in der Form überhaupt eine gültige?
        Und falls ja, müsste das '?' nicht escaped werden?

        Ja. Nein, kommt drauf an, ob das ? Datenbestandteil sein soll oder Querystring-Einleiter.

        dedlfix.

    2. Hi,

      ich muss folgende URLs umwandeln

      www.domain.de/?/meine_datei.html

      in

      www.domain.de/meine_datei.html

      RewriteRule ^(.*)/?/(.*) /$2 [R=301,L]

      Hat eider nichts gebracht.

      RewriteRule betrachtet ausschließlich die path-Komponente der URL.

      Wenn du auf den Query String matchen willst, musst du dazu eine vorgeschaltete RewriteCond nutzen.

      MfG ChrisB

      Hi,

      hast Du einen Tip wie die RewriteCond aussehen muss?
      Die Domain kann bis auf das /?/ so bleiben. Es muss halt nur aus www.domain.de/?/datei.html das werden www.domain.de/datei.html

      Gruß Sven

  2. @@Sven:

    nuqneH

    Wann immer du mit regulären Ausdrücken arbeitest, solltest du bedenken, dass ? eine Sonderbedeutung hat: /? = /{0,1}

    Wenn du also das Zeichen '?' meinst, muss es escapet werden: \?

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    1. @@Sven:

      nuqneH

      Wann immer du mit regulären Ausdrücken arbeitest, solltest du bedenken, dass ? eine Sonderbedeutung hat: /? = /{0,1}

      Wenn du also das Zeichen '?' meinst, muss es escapet werden: ?

      Qapla'

      Hi,

      ich hab es jetzt mal so versucht:

      RewriteRule ^(.*)/?/(.*) http://www.domain.de/$1 [R=301,L]
      oder so
      RewriteRule ^(.*)/?/(.*) /$1 [R=301,L]

      Leider klappt das so auch nicht.

      Gruß Sven

      1. Tach!

        Wann immer du mit regulären Ausdrücken arbeitest, solltest du bedenken, dass ? eine Sonderbedeutung hat: /? = /{0,1}
        Wenn du also das Zeichen '?' meinst, muss es escapet werden: ?
        ich hab es jetzt mal so versucht:
        Leider klappt das so auch nicht.

        Wie ChrisB schon sagte, ist das ein Problem, das sich nicht mit einem regulären Ausdruck in RewriteRule allein lösen lässt. Da hilft auch kein Maskieren. Du musst den Querystring über RewriteCond ansprechen.

        dedlfix.

        1. Tach!

          Wann immer du mit regulären Ausdrücken arbeitest, solltest du bedenken, dass ? eine Sonderbedeutung hat: /? = /{0,1}
          Wenn du also das Zeichen '?' meinst, muss es escapet werden: ?
          ich hab es jetzt mal so versucht:
          Leider klappt das so auch nicht.

          Wie ChrisB schon sagte, ist das ein Problem, das sich nicht mit einem regulären Ausdruck in RewriteRule allein lösen lässt. Da hilft auch kein Maskieren. Du musst den Querystring über ansprechen.

          dedlfix.

          Hi,

          ok klingt gut nur wie?
          Mit RewriteCond hab ich noch nie was gemacht.

          Gruß Sven

          1. Om nah hoo pez nyeetz, Sven!

            Bitte zitiere künftig nur das, worauf du dich konkret beziehst. Vollzitate sind hier weder notwendig noch erwünscht. Das Forum lässt sich so einstellen, dass der komplette Thread in einem Rutsch gelesen werden kann, so dass das Vollzitat nur stört.

            Matthias

            --
            Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Beo und Beobachter.

          2. Tach!

            ok klingt gut nur wie?
            Mit RewriteCond hab ich noch nie was gemacht.

            Nun, du fängst am besten an, die Dokumentation dazu zu lesen und suchst dir Beispiele. Wenn du etwas konkret nicht verstehst, dann frag bitte konkret nach.

            dedlfix.