Andreas-Lindig: wie geht hier der my-Bereich?

Hi Forenmasters,

wenn ich hier in den my-Bereich gehe, gehe ich ja in ein Unterverzeichnis - jedenfalls laut Adresszeile. Wie stellt ihr denn da eigentlich die gleichen Scripte wie eine Etage höher zur Verfügung? Ich will sowas für meinen admin-Bereich machen, aber wenn ich da die Scripte von einer Ebene höher einbinde, muß ich ja sämtliche Pfade ändern. Wie wird das denn hier gelöst?

Gruß, Andreas

--
<img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
hier könnte auch ruhig mal'n neues Bild stehen.
  1. Hallo.

    wenn ich hier in den my-Bereich gehe, gehe ich ja in ein Unterverzeichnis - jedenfalls laut Adresszeile. Wie stellt ihr denn da eigentlich die gleichen Scripte wie eine Etage höher zur Verfügung?

    Lass mich raten: mod_rewrite für "?my=xyz"?
    MfG, at

  2. Hallo Andreas,

    Wie stellt ihr denn da eigentlich die gleichen Scripte wie eine
    Etage höher zur Verfügung?

    So:

    BaseURL "/"
     PostingURL "?t=%t&m=%m"
     UBaseURL "/my/"
     UPostingURL "/my/?t=%t&m=%m"

    ArchivePostingURL "/archiv/t/%t/m/%m/"
     ArchiveURL "/archiv/"

    PostScript "/cgi-bin/fo_post"
     UPostScript "/cgi-bin/user/fo_post"

    UserConfig "/cgi-bin/user/fo_userconf"
     UserRegister "/cgi-bin/fo_usermanagement"
     UserManagement "/cgi-bin/user/fo_usermanagement"

    ;-) Der Ort saemtlicher Scripte ist konfigurierbar.

    Grüße,
     CK

    --
    So, wie ein Teil ist, ist das Ganze.
    http://wwwtech.de/
    1. Hallo Christian,

      ich fürchte das ist mir zu hoch.

      BaseURL "/"
      PostingURL "?t=%t&m=%m"
      UBaseURL "/my/"
      UPostingURL "/my/?t=%t&m=%m"

      und wo stellt man sowas ein? Im Apatsche? Mal vorweg: kann ich sowas als Mieter bei einem Hoster überhaupt machen?

      Gruß, Andreas

      --
      <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
      hier könnte auch ruhig mal'n neues Bild stehen.
      1. Hallo Andreas-Lindig,

        BaseURL "/"
        PostingURL "?t=%t&m=%m"
        UBaseURL "/my/"
        UPostingURL "/my/?t=%t&m=%m"

        und wo stellt man sowas ein? Im Apatsche?

        Nein, in der Forums-Konfiguration.

        Mal vorweg: kann ich sowas als Mieter bei einem Hoster überhaupt
        machen?

        Ja, klar ;-)

        Grüße,
         CK

        --
        Echte Hacker benutzen Aexte. (Thomas Walter in de.org.ccc)
        http://wwwtech.de/
        1. BaseURL "/"
          PostingURL "?t=%t&m=%m"
          UBaseURL "/my/"
          UPostingURL "/my/?t=%t&m=%m"

          und wo stellt man sowas ein? Im Apatsche?

          Nein, in der Forums-Konfiguration.

          hehe, das nützt mir natürlich viel... kannst Du die mal per Fernsteuerung auch meinem Forum zur Verfügung stellen? ;-)

          SbS(Scherz bei Seite), könntest Du das etwas erläutern? Ich lese zwar, daß Du jeweils einen Basispfad angibst und das Schema für den query-String, aber was wird denn nun aus den Pfaden, die im my/-Bereich aufgerufen werden: werden die alle umgeschrieben? Oder gehst Du von absoluten allgültigen Standard-Basispfad aus und hängst 'BaseURL' oder 'UPostingURL' da dran?

          Gruß, Andreas

          --
          <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
          hier könnte auch ruhig mal'n neues Bild stehen.
          1. Hallo Andreas,

            SbS(Scherz bei Seite), könntest Du das etwas erläutern? Ich lese
            zwar, daß Du jeweils einen Basispfad angibst und das Schema für
            den query-String, aber was wird denn nun aus den Pfaden, die im
            my/-Bereich aufgerufen werden: werden die alle umgeschrieben?

            Nein, das ist ein eigenes Verzeichnis. Allerdings koennte man es auch
            mit mod_rewrite machen:

            RewriteEngine On
            RewriteRule /my/(.*) /$1

            <Location "/my/">
              AuthType Basic
              # ....
            </Location>

            Oder gehst Du von absoluten allgültigen Standard-Basispfad aus
            und hängst 'BaseURL' oder 'UPostingURL' da dran?

            Ne, die sind absolut. Die könnten sogar eine HTTP-Adresse enthalten.

            Grüße,
             CK

            --
            Das Sein entsteht aus dem Nicht-Sein.
            http://wwwtech.de/
            1. aber was wird denn nun aus den Pfaden, die im
              my/-Bereich aufgerufen werden: werden die alle umgeschrieben?

              Nein, das ist ein eigenes Verzeichnis.

              liegen denn in diesem Verzeichnis die Scripte alle nochmal? Ich mein, die dürfen ja nicht doppelt sein wg. Inkonsistenz.

              Allerdings koennte man es auch
              mit mod_rewrite machen:

              RewriteEngine On
              RewriteRule /my/(.*) /$1

              <Location "/my/">
                AuthType Basic
                # ....
              </Location>

              hmm..., da muß ich mich erstmal einlesen. Sollten durch "<Location "/my/">" die Pfade erhalten bleiben? Ich habe schon so einen kleinen Versuch mit mod_rewrite gemacht und da ist das Script eben so behandelt worden, als läge es in dem Unterverzeichnis, von dem aus es mit mod_rewrite aufgerufen wurde.

              Gruß, Andreas

              --
              <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
              hier könnte auch ruhig mal'n neues Bild stehen.
              1. Hallo Andreas,

                aber was wird denn nun aus den Pfaden, die im
                my/-Bereich aufgerufen werden: werden die alle umgeschrieben?

                Nein, das ist ein eigenes Verzeichnis.

                liegen denn in diesem Verzeichnis die Scripte alle nochmal? Ich mein, die dürfen ja nicht doppelt sein wg. Inkonsistenz.

                Nein, dort existieren symbolische Verknuepfungen auf die eigentlichen Skripte.
                BTW, warum schaust Du Dir nicht einfach die Quellen des Classic Forum an und/oder installierst dieses?

                Beste Gruesse

                Jan

                1. Hallo Jan,

                  Nein, dort existieren symbolische Verknuepfungen auf die eigentlichen Skripte.
                  BTW, warum schaust Du Dir nicht einfach die Quellen des Classic Forum an und/oder installierst dieses?

                  weil mir das zu hoch ist und ich nur das Prinzip verstehen will. Aber was sind symbolische Verknüpfungen? (hört nicht auf zu fragen dieser Kerl ;-)

                  Gruß, Andreas

                  --
                  <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
                  hier könnte auch ruhig mal'n neues Bild stehen.
                  1. Hallo Andreas-Lindig,

                    Aber was sind symbolische Verknüpfungen? (hört nicht auf zu fragen dieser Kerl ;-)

                    Hmja, vielleicht sollte ich nicht immer alles eindeutschen. Aber ich mag dieses "denglisch" nunmal nicht sonderlich ;)

                    Es gibt aus dem genannten Verzeichnis "symbolic links", also eigentlich Verweise, auf die eigentlichen Skripte. Das heisst, die Skripte existieren nicht wirklich in diesem Verzeichnis, beim Aufruf des Dateinamens wird aber dieser Verknuepfung gefolgt und das eigentliche Skript, auf das die Verknuepfung zeigt, aufgerufen.

                    Ich hoffe mal, das war verstaendlicher.

                    Beste Gruesse

                    Jan

  3. Hallo,

    wenn ich hier in den my-Bereich gehe, gehe ich ja in ein Unterverzeichnis - jedenfalls laut Adresszeile. Wie stellt ihr denn da eigentlich die gleichen Scripte wie eine Etage höher zur Verfügung? Ich will sowas für meinen admin-Bereich machen, aber wenn ich da die Scripte von einer Ebene höher einbinde, muß ich ja sämtliche Pfade ändern. Wie wird das denn hier gelöst?

    Es handelt sich um CGI-Programme, auf die an verschiedenen Stellen durch DirectoryIndex bzw. symbolische Links verwiesen wird und die anhand der Umgebungsparameter feststellen, in welchem Modus sie laufen (wenn ich das richtig sehe). Somit können keine Pfadprobleme wie die von dir beschriebenen auftreten, weil die Programme nicht auf verschiedene Verzeichnisse verteilt sind, wie die URL vermuten ließe.

    Mathias

  4. Hallo Euch alle,

    Es handelt sich um CGI-Programme, auf die an verschiedenen Stellen durch DirectoryIndex bzw. symbolische Links verwiesen wird und die anhand der Umgebungsparameter feststellen, in welchem Modus sie laufen (wenn ich das richtig sehe). Somit können keine Pfadprobleme wie die von dir beschriebenen auftreten, weil die Programme nicht auf verschiedene Verzeichnisse verteilt sind, wie die URL vermuten ließe.

    meint Ihr, das geht auch mit mod_rewrite? Ich habe mich da gerade etwas eingelesen. Der dritte Versuch einer ganz einfachen Umleitung hat online schonmal so halbwegs geklappt. Bei mir Zuhause geht das gar nicht. Liegt das vielleicht daran, daß ich Apatsche als CGI habe?

    Wäre nett, wenn jemand zu mod_rewrite einen guten Link hat, der die genaue Syntax möglichst DAU-ausführlich beschreibt. Ich bin da gerade eher durch DAU-ausprobieren zur Lösung gekommen ;-)

    Gruß, Andreas

    --
    <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
    hier könnte auch ruhig mal'n neues Bild stehen.
    1. jaja, nur das einfache Umleiten ging. Aber jetzt habe ich das Verzeichnis Passwortgeschützt und die Angaben stehen also in der .htaccess-Datei. Das muß ich ja schließlich machen, um an den Usernamen überhaupt ranzukommen. Weitere Angaben für mod_rewrite kann ich jetzt aber in die .htaccess-Datei nicht mehr reinschreiben. Die kann man dann auf dem Server nicht mehr speichern.

      Frage bitte: bin ich da überhaupt auf dem richtigen Weg?

      Gruß, Andreas

      --
      <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
      hier könnte auch ruhig mal'n neues Bild stehen.
      1. Hi!

        Wieso willst Du das überhaupt in einem Script machen? Du kannst doch den Teil vom Quellcode den beide Scripte benötigen einfach per include() einbinden, oder nicht?

        Und sonst könntest Du es denke ich auch einfach per Alias machen: http://httpd.apache.org/docs-2.0/mod/mod_alias.html#alias

        Grüße
        Andreas

        --
        SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
        1. Hi Andreas,

          Wieso willst Du das überhaupt in einem Script machen?

          Also:

          1. Ich will einen geschützten Admin-Bereich, in dem ich die gleiche Forumsansicht habe, wie der Normaluser - nur mit anderen/zusätzlichen Funktionen (eben ähnlich, wie hier der my-Bereich. Ich nehme an, daß es hier auch einen ähnlichen admin-Bereich gibt.)

          2. Nun muß ich zum einen das Passwort abfragen, zum zweiten muß ich auf jeder folgenden Forumsseite den REMOTE_USER (der sich ja über das Passwort authentifiziert hat) abfragen, um ihm die admin-Funktionen zur Verfügung zu stellen.

          Du kannst doch den Teil vom Quellcode den beide Scripte benötigen einfach per include() einbinden, oder nicht?

          Das war ja meine erst Überlegung, aber da ändern sich eben alle Pfade.

          Beispiel:

          Hauptverzeichnis
          |
          +->Datei1.php
          +->Datei2.php
          |
          +--Unterverzeichnis(Admin)
             |
             +->Datei3.php (bindet Hauptverzeichnis->Datei1.php ein)

          wenn in Datei1.php nun ein relativer Link auf Datei2.php steht, dann verweist der, wenn Datei1.php in Datei3.php eigebunden ist, auf Hauptverzeinis/Unterverzeichnis/Datei2.php und die gibt es eben nicht.

          Das könnte man natürlich umschreiben, aber ich will wissen, ob es da auch eine andere Möglichkeit gibt, vor allem eine, in der ich nicht jeden Link im Script aus tausend Wenns und Abers zusammensetzen muß, sondern am Ende auch noch sehen kann, welche Zielseite denn nun gemeint war ;-) Außerdem hat mich at jetzt auf die Idee mit mod_rewrite gebracht und da will ich jetzt auch mal genau wissen, wie das geht. Es bietet ja auch noch mehr, z.B. aus http://forum.de.selfhtml.org/my/?t=87488&m=520458 mach http://forum.de.selfhtml.org/my/t/87488/m/520458. Soll wohl Suchmaschinenfreundlicher sein.

          Und sonst könntest Du es denke ich auch einfach per Alias machen: http://httpd.apache.org/docs-2.0/mod/mod_alias.html#alias

          Habe da gerade mal gelesen: das scheint man ja nur in der httpd.conf einstellen zu können, oder? Das ginge dann ja nicht bei meinem Hoster.

          Gruß, Andreas

          --
          <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
          hier könnte auch ruhig mal'n neues Bild stehen.
          1. Hi!

            Du kannst doch den Teil vom Quellcode den beide Scripte benötigen einfach per include() einbinden, oder nicht?

            Das war ja meine erst Überlegung, aber da ändern sich eben alle Pfade.

            Dann verwende absolute Pfade, kannst ja irgendwo in einem zentralen Script eine entsprechende Konstante für Deinen "ROOT_PATH" oder sowas definieren.

            Das könnte man natürlich umschreiben, aber ich will wissen, ob es da auch eine andere Möglichkeit gibt, vor allem eine, in der ich nicht jeden Link im Script aus tausend Wenns und Abers zusammensetzen muß, sondern am Ende auch noch sehen kann, welche Zielseite denn nun gemeint war ;-) Außerdem hat mich at jetzt auf die Idee mit mod_rewrite gebracht und da will ich jetzt auch mal genau wissen, wie das geht. Es bietet ja auch noch mehr, z.B. aus http://forum.de.selfhtml.org/my/?t=87488&m=520458 mach http://forum.de.selfhtml.org/my/t/87488/m/520458. Soll wohl Suchmaschinenfreundlicher sein.

            Wenn Du sowas wie einen "Schwanzabschneider" wie hier implementierst ist das wohl irrelevant, es sei denn Du implementierst das so dass diese URLs auch mit dem Archiv funktionieren (wobei es wohl nicht drauf ankommt dass es ein paar Tage eher eingetragen wird. Wäre eher interessant für unveränderte URLs innerhalb von Postings. Aber die kannst Du dann besser bei der Archivierung umschreiben).  /my kann eh keine Suchmaschine lesen.

            Und sonst könntest Du es denke ich auch einfach per Alias machen: http://httpd.apache.org/docs-2.0/mod/mod_alias.html#alias

            Habe da gerade mal gelesen: das scheint man ja nur in der httpd.conf einstellen zu können, oder? Das ginge dann ja nicht bei meinem Hoster.

            stimmt. Dann verwende halt eine passende Rewrite-Rule ;-)
            In der Apache-Doku gibt es viele Infos und Beispiele dazu:

            http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html
            http://httpd.apache.org/docs-2.0/misc/rewriteguide.html

            versuch mal was in der Art:

            RewriteEngine on
            RewriteRule   ^/my/(.*)$ /$1  [QSA]

            Grüße
            Andreas

            --
            SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/
            1. wollte mich mal für die Links bedanken. Da muß ich mich erstmal einlesen.

              Ich habe mir jetzt vorerst eine http-Auth selbst gebastelt ohne geschütztes Verzeichnis.Inzwischen habe ich auch im Archiv gelesen und gesehen, daß Du auch mal so'ne http-Auth gebastelt hast. Was ist denn daraus geworden? Also meine funktioniert ganz gut, wenngleich ich die Argumente im Archiv für Formulare ganz gut finde. Das schöne an einer http-Auth finde ich eben, daß man nicht immer diese häßliche SessionID mitgeben muß. Achso: ich mache es übbrigens ohne Session (_mit_ logout).

              Gruß, Andreas

              --
              <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
              hier könnte auch ruhig mal'n neues Bild stehen.
          2. Moin,

            Das könnte man natürlich umschreiben, aber ich will wissen, ob es da auch eine andere Möglichkeit gibt, vor allem eine, in der ich nicht jeden Link im Script aus tausend Wenns und Abers zusammensetzen muß, sondern am Ende auch noch sehen kann, welche Zielseite denn nun gemeint war ;-)

            Also ich habe das mal so gelöst indem ich einfach einen 'Einloggen'-Link zur Verfügung gestellt habe. Der führt dann auf die aktuelle Seite plus einem URL-Parameter der dazu führt dass das Skript zwingend eine Authentifizierung haben will (d.h. also PHP_AUTH_USER und PHP_AUTH_PW auslesen, überprüfen und bei Nichtgefallen einen 401 senden). Der Browser sendet dann automatisch für alle zukünftigen Requests Authentifizierungsdaten mit, so, dass du deine Links anzeigen kannst, der URL sich gegenüber der Normalversion aber nicht ändert.

            Selbstverfreilich musst du jedes mal, wenn eine der administrativen Funktionen aufgerufen wird, die Authorisierung erneut überprüfen. Das kann aber der gleiche Code erledigen wie oben.
            (Frag mal die Telekom, die erzählen dir was passiert wenn man das nicht tut ;-)

            --
            Henryk Plötz
            Grüße aus Berlin
            ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
            ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
            1. Hi Henryk,

              danke erstmal für die Hinweise. Ich lerne so immer was Neues kennen :-)

              Der Browser sendet dann automatisch für alle zukünftigen Requests Authentifizierungsdaten mit,

              so, das habe ich eben gebastelt und genau diese Automatik scheint mir ein Problem. Wie fordere ich denn den Brauser auf, nach einem Ausloggen, die Daten erneut anzufordern? Bzw. wie muß die Ausloggfunktion aussehn? Ich übergebe jetzt zum einloggen 'admin=1' ->(Abfrage der Daten) und zum Ausloggen 'admin=0' ->(Abfrage der Daten wird übersprungen). Der admin-Status verschwindet auch wie gewünscht. Aber bei erneutem Einloggen, ohne den Brauser vorher geschlossen zu haben, komme ich direkt rein. Ist natürlich blöd, wenn zwei Leute den gleichen Rechner benutzen.

              Selbstverfreilich musst du jedes mal, wenn eine der administrativen Funktionen aufgerufen wird, die Authorisierung erneut überprüfen. Das kann aber der gleiche Code erledigen wie oben.
              (Frag mal die Telekom, die erzählen dir was passiert wenn man das nicht tut ;-)

              mit denen rede ich nur noch im Notfall. Was passiert denn dann? ;-)

              Gruß, Andreas

              --
              <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
              hier könnte auch ruhig mal'n neues Bild stehen.
              1. Moin,

                so, das habe ich eben gebastelt und genau diese Automatik scheint mir ein Problem. Wie fordere ich denn den Brauser auf, nach einem Ausloggen, die Daten erneut anzufordern? Bzw. wie muß die Ausloggfunktion aussehn? Ich übergebe jetzt zum einloggen 'admin=1' ->(Abfrage der Daten) und zum Ausloggen 'admin=0' ->(Abfrage der Daten wird übersprungen). Der admin-Status verschwindet auch wie gewünscht. Aber bei erneutem Einloggen, ohne den Brauser vorher geschlossen zu haben, komme ich direkt rein. Ist natürlich blöd, wenn zwei Leute den gleichen Rechner benutzen.

                Ein 'Ausloggen' gibt es bei HTTP Auth nicht, jedenfalls nicht serverseitig. Das ist eine Funktionalität die vom Client bereit gestellt werden muß. Siehe ungefähr 27 Threads im Archiv dazu. (Merke: 93,2% aller Statistiken werden aus dem Stehgreif erfunden.)

                Was deine Beobachtungen angeht: Strenggenommen basiert das was ich vorgeschlagen habe nur auf einem Verhalten welches die Spezifikation ausdrücklich erlaubt, aber nicht fordert. Mein äusserst hastiger Test mit lynx ist aber durchaus positiv aufgefallen. Kommt dir vielleicht das Caching dazwischen?

                mit denen rede ich nur noch im Notfall. Was passiert denn dann? ;-)

                Sehr schön und vollständig dokumentiert: http://www.ccc.de/t-hack/.

                Der Code den ich verwendet habe:
                --- Achtung, das ist hässlich und falsch und tut nur für sehr anspruchslose Werte von "funktionieren" so als ob es funktionieren würde. Bitte nicht nachmachen oder abschreiben. ---

                <?php
                if($_GET["login"]) auth(FALSE);
                auth();
                function auth($bla = TRUE)
                {
                  if(isset($_SERVER["PHP_AUTH_USER"]))
                    $GLOBALS["login"] = "ok";
                  else if(!$bla) {
                    header("Status: 401 Unauthorized");
                    header('WWW-Authenticate: Basic realm="Test"');
                  }
                }
                ?>

                <a href="test1.php?t=1">Normaler Link</a><br>
                <a href="test1.php?t=2">Normaler Link die zweite</a><br>
                <a href="test1.php?login=true">Einloggen</a><br>
                <?php if($login) { ?>
                <a href="test1.php?t=3">Admin-Link</a><br>
                <a href="test1.php?t=4">Admin-Link nochmal</a>
                <?php } ?>

                --- Siehe Warnung oben. Das gilt insbesondere für Besucher aus dem Archiv. ---

                --
                Henryk Plötz
                Grüße aus Berlin
                ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
                ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~