Twilo: Mod-Rewrite: Problem mit %2F in der URL

Hallo,

warum ist denn dieser Artikel schon im Archiv gelandet? :(

Gehört denn "xyz.de" wirklich dir [...]?

example.org gehört mir genauso wenig...

Das einfachste ist, deine Datei "2-Text%201%2F5.htm" ganz einfach mit einem vernünftigen Namen wie etwa "2text5.htm" zu versehen und konsequenterweise Leerzeichen und ähnliche Dummheiten in Dateinamen ganz und gar zu untersagen

beantwortet jetzt aber nicht meine Frage, warum %2f den Apachen sört ;)

bzw. mit einer Errorseite 707 "Haha! Unsinn angestellt!" beantworten zu lassen.

soll das jetzt lustig sein, oder meintest du 404?

mfg
Twilo

  1. Hello,

    Das einfachste ist, deine Datei "2-Text%201%2F5.htm" ganz einfach mit einem vernünftigen Namen wie etwa "2text5.htm" zu versehen und konsequenterweise Leerzeichen und ähnliche Dummheiten in Dateinamen ganz und gar zu untersagen

    Nicht jeder gültige Dateiname ist gleichzeitig ein gültiger Ressourcen-Name via HTTP.
    Da müsste man ggf. erst noch rawurlenceode() (PHP) oder vergleichbare Codierungen drauf anwenden.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hallo,

      Da müsste man ggf. erst noch rawurlenceode() (PHP) oder vergleichbare Codierungen drauf anwenden.

      aus
      print '<a href="/artikel/2-'.rawurlencode('Text 1/5').'.htm">test</a>';

      wird wieder ein
      /artikel/2-Text%201%2F5.htm

      und somit wieder "Objekt nicht gefunden!"

      mfg
      Twilo

      1. Hello,

        Da müsste man ggf. erst noch rawurlenceode() (PHP) oder vergleichbare Codierungen drauf anwenden.

        aus
        print '<a href="/artikel/2-'.rawurlencode('Text 1/5').'.htm">test</a>';

        wird wieder ein
        /artikel/2-Text%201%2F5.htm

        und somit wieder "Objekt nicht gefunden!"

        Ich hatte das auch neulich.
        Leider weiß ich nicht mehr auswendig, was die Ursache war.
        Aber ich weiß noch, dass ich es wusste, nachdem ich ins error_log geschaut hatte :-)

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. Hallo,

          Ich hatte das auch neulich.
          Leider weiß ich nicht mehr auswendig, was die Ursache war.
          Aber ich weiß noch, dass ich es wusste, nachdem ich ins error_log geschaut hatte :-)

          in der Access_log steht nur folgendes
          145.253.2.238 - - [03/Feb/2006:18:23:45 +0100] "GET /artikel/2-Text%201%2F5.htm HTTP/1.0" 404 1157 "-" "Opera/9.0 (Windows NT 5.0; U; de)"

          eine error_log wird mir nicht angezeigt... ist nicht mein Server (ist so'ne Confixx Krücke) ;)

          mfg
          Twilo

          1. Hello,

            in der Access_log steht nur folgendes
            145.253.2.238 - - [03/Feb/2006:18:23:45 +0100] "GET /artikel/2-Text%201%2F5.htm HTTP/1.0" 404 1157 "-" "Opera/9.0 (Windows NT 5.0; U; de)"

            Das Problem ist, dass %2F wieder zu / aufgelöst wird und damit als Verzeichnistrenner interpretiert wird. Das müsste mit \ escaped werden. Dafür gibt es bei PHP aber auch eine Funktion.

            Ich weiß aber nicht mehr, in welche Kategorie sie gehört und schon gar nicht, wie sie heißt.
            Ich benutze i.d.R. keine "verrückten Dateinamen".

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

      2. Hi Twilo,

        wird wieder ein
        /artikel/2-Text%201%2F5.htm

        und somit wieder "Objekt nicht gefunden!"

        Nenn doch die Datei einfach "2-Text %2F%".
        Oder rewrite alles was in /artikel/ ist auf ein Script das dann den artikel rausgibt.

        Viele Grüße aus Freiburg,
        Marian

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) n4:( ss:) de:] js:| ch:? mo:} zu:)
        <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
        1. Hallo,

          Oder rewrite alles was in /artikel/ ist auf ein Script das dann den artikel rausgibt.

          das Rewrite Rule sieht ja wie folgt aus

          RewriteEngine On
          RewriteBase /
          RewriteRule ^artikel/([0-9]+)-(.*) /datenbank/index.php?id=$1

          nur funktioniert das nicht, ich frag mich wieso... er soll da alles nach ([0-9]+)- akzeptieren... :(

          mfg
          Twilo

          1. hi,

            nur funktioniert das nicht, ich frag mich wieso... er soll da alles nach ([0-9]+)- akzeptieren... :(

            Da dürfte ein Anschalten des Error Loggings für's rewriten sicher hilfreich sein.

            Vielleicht veranlasst irgendetwas den Apachen, wegen des im Request URI auftauchenden Slash diesen gar nicht erst von der Rewrite Engine bearbeiten zu lassen.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hallo,

              hi,

              nur funktioniert das nicht, ich frag mich wieso... er soll da alles nach ([0-9]+)- akzeptieren... :(

              Da dürfte ein Anschalten des Error Loggings für's rewriten sicher hilfreich sein.

              hab jetzt folgendermaßen gemacht

              RewriteEngine On
              RewriteLogLevel 9
              RewriteLog rewrite.log
              RewriteBase /
              RewriteRule ^artikel/([0-9]+)-(.*) /datenbank/index.php?id=$1

              nun erhalte ich nur ein 500er, muss der Serverbetreiber noch etwas aktivieren?

              mfg
              Twilo

              1. hi,

                hab jetzt folgendermaßen gemacht

                RewriteEngine On
                RewriteLogLevel 9

                RewriteLogLevel Directive
                Context: server config, virtual host

                RewriteLog rewrite.log

                RewriteLog Directive
                Context: server config, virtual host

                nun erhalte ich nur ein 500er, muss der Serverbetreiber noch etwas aktivieren?

                Da du auf server config und virtual host höchstvermutlich keinen Zugriff haben wirst, müsste der Betreiber diese Konfiguration für dich vornehmen, ja.

                Da wäre es vielleicht günstiger, dass erst mal mit einm lokalen Testserver auszuprobieren, über dessen Konfiguration man volle Kontrolle hat.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. hi,

    Gehört denn "xyz.de" wirklich dir [...]?

    example.org gehört mir genauso wenig...

    example.com/.net/.org sind aber speziell als Beispieldomains gedacht.

    was kann/muss ich tun, dass der Apache folgende URL http://xyz.de/artikel/2-Text%201%2F5.htm richtig umleitet?

    Du könntest stattdessen /artikel/2-Text%201/5.htm aufrufen.
    Warum willst du den Slash denn an dieser Stelle überhaupt maskieren?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      Du könntest stattdessen /artikel/2-Text%201/5.htm aufrufen.
      Warum willst du den Slash denn an dieser Stelle überhaupt maskieren?

      der Text stammt aus einer Überschrift, diese sollte auch automatisch als Dateiname genommen werden.. zwecks google, ka ob das was hilft ;)

      jemand hatte nun von denen in der Überschrift ein / verwendet und nun kam diese 404 Meldung

      in der Überschrift werden auch Akzente verwendet, brauche ich diese Zeichen und sonstige nicht maskieren?

      mfg
      Twilo

      1. Hello,

        in der Überschrift werden auch Akzente verwendet, brauche ich diese Zeichen und sonstige nicht maskieren?

        Das ist das Stichwort. Du musst sie für den Zugriff auf die Ressource _maskieren_, wenn sie zum Dateinamen gehören und keine Steuerzeichen darstellen, Du musst sie _codieren_ für die Übertragung via HTTP. Das sind zwei verschiedene Schuhe.

        Deshalb sagte ich ja, es gibt noch eine Funktion. Die _maskiert_ Namen für die Shell.

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. Hello,

          in der Überschrift werden auch Akzente verwendet, brauche ich diese Zeichen und sonstige nicht maskieren?

          Das ist das Stichwort. Du musst sie für den Zugriff auf die Ressource _maskieren_, wenn sie zum Dateinamen gehören und keine Steuerzeichen darstellen, Du musst sie _codieren_ für die Übertragung via HTTP. Das sind zwei verschiedene Schuhe.

          Entweder, wir hatten die Funktion damals nur selber geschrieben (es ging dabei um die Übergabe von Dateinamen an das shell-Kommado file zur Ermittlung des Mime-Types), oder aber ich finde die Funktion einfach nicht. Bin mir aber sicher, dass ich sie gefunden hatte, nachdem wir selber eine geschreiben hatten. Du weißt schon, die doppelten Räder :-)

          Harzliche Grüße vom Berg
          http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau

          1. Hello,

            http://de.php.net/manual/de/function.escapeshellcmd.php
            http://de.php.net/manual/de/function.escapeshellarg.php

            springen mich da gerade an.

            Was zu prüfen wäre :-)

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

            1. Hallo,

              http://de.php.net/manual/de/function.escapeshellcmd.php
              http://de.php.net/manual/de/function.escapeshellarg.php

              thanks, ich werd das nachher mal testen und berichten, ob ich damit Erfolg hatte :)

              mfg
              Twilo

              1. Hello,

                http://de.php.net/manual/de/function.escapeshellcmd.php
                http://de.php.net/manual/de/function.escapeshellarg.php

                thanks, ich werd das nachher mal testen und berichten, ob ich damit Erfolg hatte :)

                Ich habe mir gerade erstmal meinen Testserver zurückgeholt *grummel*
                und mal ausprobiert, ein File mit / im Namen anzulegen. Über die Shell ist mir das nicht gelungen.
                Aber das soll nicht bedeuten, dass es nicht geht.
                Bei DOS gab es auch solche Merkwürdigkeiten.
                Über FCB-Funktionen konnte man sogar doppelte Dateinamen anlegen...

                Harzliche Grüße vom Berg
                http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau

                1. hi,

                  Ich habe mir gerade erstmal meinen Testserver zurückgeholt *grummel*
                  und mal ausprobiert, ein File mit / im Namen anzulegen. Über die Shell ist mir das nicht gelungen.

                  Um echte Namen auf dem Dateisystem geht es hier doch gar nicht.

                  gruß,
                  wahsaga

                  --
                  /voodoo.css:
                  #GeorgeWBush { position:absolute; bottom:-6ft; }
                  1. Hello Wahsaga,

                    Ich habe mir gerade erstmal meinen Testserver zurückgeholt *grummel*
                    und mal ausprobiert, ein File mit / im Namen anzulegen. Über die Shell ist mir das nicht gelungen.

                    Um echte Namen auf dem Dateisystem geht es hier doch gar nicht.

                    Ja sorry. Ich hatte da eben auch etwas um die Ecke gedacht. Wieso soll man sich mit einer Rewrite-Rule rumplagen, wenn dann das Ergebnis nicht verwertbar wäre... so ungefähr war mein Gedankengang.

                    Harzliche Grüße vom Berg
                    http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau

      2. Hallo Twilo,

        der Text stammt aus einer Überschrift, diese sollte auch automatisch als Dateiname genommen werden.. zwecks google, ka ob das was hilft ;)
        jemand hatte nun von denen in der Überschrift ein / verwendet und nun kam diese 404 Meldung

        Warum machst du nicht einfach aus allem was nicht in z.B. a-z0-9.-_ enthalten ist zu Punkten, (Binde|Unter)strichen oder entfernst es einfach ganz?

        Grüße aus Nürnberg
        Tobias

        --
        TOP7: Möglichkeiten, den eigenen Ruf zu ruinieren
        Selfcode: ie:% fl:( br:< va:) ls:[ fo:) rl:° n4:& ss:) de:] js:| ch:? sh:( mo:| zu:)
        1. Hallo,

          Warum machst du nicht einfach aus allem was nicht in z.B. a-z0-9.-_ enthalten ist zu Punkten, (Binde|Unter)strichen oder entfernst es einfach ganz?

          könnte ich machen, im Moment mache ich es wie folgt in Smarty
          <a href="/artikel/<!--{$datensatz.id}-->-<!--{$datensatz.ueberschrift|utf8_decode|escape:"url"}-->.htm">weitere Informationen</a>

          entweder ich schreib mir ein Smarty Plugin, oder schreibe mein PHP-Script um

          könnte man dieses ersetzen auch beim Abfragen der Datenbank realisieren?

          mfg
          Twilo