Joerg Kulow: Virtuelles Verzeichnis-Aufruf zu Script schicken

Hallo,

hier mein Problem:

Ich moechte den Seitenaufruf "http://www.mydomain.de/12345678" auf diese URL "http://www.andereDomain.de/scripts/run.dll?Login:12345678" weiterleiten.
Dies duerfte noch kein Problem sein.
Die Nummer "12345678" ist aber keine konstante Zahl, sondern immer unterschiedlich ( 2 Mio. Variationen) und deshalb moechte ich keine Verzeichnisse anlegen.
Das alles soll auf "Microsoft Internet Information Server" laufen.

Hat jemand eine Idee wie ich dieses Problem loesen kann.
Kann man dies mit ASP machen oder unterstuetzt der IIS so etwas?

Vielen Dank fuer Eure Hilfe

Joerg

  1. Hallö,
    mit "http://www.mydomain.de/12345678" wird es nicht funzen, da der IIS dann in dem Verzeichnis "12345678" nach einer Startdatei sucht. Da das Verzeichnis natürlich nicht existiert, gibt es eine Fehlermeldung. Vieleicht hast du die Möglichkeit es mit "http://www.mydomain.de?12345678" zu machen, dann geht es ganz leicht mit ASP:

    Response.Redirect("http://www.andereDomain.de/scripts/run.dll?Login:" & Request.Querystring())

    cucu
    Thomas

    1. »»  Vieleicht hast du die Möglichkeit es mit "http://www.mydomain.de?12345678" zu machen, dann geht es ganz leicht mit ASP

      Die Moeglichkeit habe ich nicht. Aber ich habe schon eine Idee, ich missbrauche den Server-Error "404". Diese Loesung ist wohl nicht ganz sauber, aber sie funktioniert.
      Jetzt ist nur noch die Frage, wie kann ich die URL aufrufen ohne das der User was davon merkt. Ich denke da an ein Frameset.
      Ich weiss nur noch nicht wie das mit dem Frameset funktionieren kann.
      Weiss jemand Rat?

      Hier mein bisheriger Versuch:

      ---------------------------

      <% @Language=VBScript %>
      <% Option Explicit %>
      <% Response.Buffer = True %>

      <HTML>
      <HEAD>
      <TITLE>Bounce</TITLE>
      </HEAD>
      <BODY>

      <%
      Dim name
      Dim bounceurl
      Dim Tools
      Dim varDate
      Dim iRequest

      name = Mid( Request.ServerVariables("QUERY_STRING"),23,8)

      varDate = Time

      Select Case Second(varDate)
                      Case 1,7,13,19,25,31,37,43,49,55
                           iRequest = "www.andereDomain1.de/scripts/run.dll?Login:"+name
                      Case 2,8,14,29,26,32,38,44,50,56
                           iRequest = "www.andereDomain2.de/scripts/run.dll?Login:"+name
                      Case 3,9,15,21,27,33,39,45,51,57
                           iRequest = "www.andereDomain3.de/scripts/run.dll?Login:"+name
                      Case 4,10,16,22,28,34,40,46,52,58
                           iRequest = "www.andereDomain4.de/scripts/run.dll?Login:"+name
                      Case 5,11,17,23,29,35,41,47,53,59
                           iRequest = "www.andereDomain5.de/scripts/run.dll?Login:"+name
                      Case else
                           iRequest = "www.andereDomain6.de/scripts/run.dll?Login:"+name
                      end Select

      ' They just linked from outside of the site

      ' Flush Response Buffer

      Response.Redirect( iRequest)
                      Response.Flush %>
      %>

      </BODY>
      </HTML>

      ---------------------------

      Dies funktioniert nur, wenn der User den vollen Domainnamen angibt. Laesst er "www." weg, habe ich ein Problem. Wie kann ich das abfangen?

      Joerg

      1. Hallö,

        Jetzt ist nur noch die Frage, wie kann ich die URL aufrufen ohne das der User was davon merkt. Ich denke da an ein Frameset.
        Ich weiss nur noch nicht wie das mit dem Frameset funktionieren kann.

        Erzeuge doch einfach den kpl. Frameset mit ASP dynamisch und überschreibe ihn bei jedem Aufruf. Anschließend brauchst du ihn nur noch mit einem Redirect aufrufen.

        Dies funktioniert nur, wenn der User den vollen Domainnamen angibt. Laesst er "www." weg, habe ich ein Problem. Wie kann ich das abfangen?

        Ich gehe mal davon aus das der Domainname in der Variabel "name" enthalten ist.
        Dann überprüfe diese Variabel ob "www." enthalten ist, und wenn nicht dann hänge eben dies vorne an.

        If LEFT(name, 4) <> "www." Then name = "www." & name

        oder

        If INSTR(name, "www.") < 1 Then name = "www." & name

        cucu
        Thomas

        1. Erzeuge doch einfach den kpl. Frameset mit ASP dynamisch und überschreibe ihn bei jedem Aufruf. Anschließend brauchst du ihn nur noch mit einem Redirect aufrufen.

          Ich bin noch etwas unbeholfen mit ASP. Hast Du ein Beispiel fuer mich?

          Dann überprüfe diese Variabel ob "www." enthalten ist, und wenn nicht dann hänge eben dies vorne an.

          Danke, baue ich ein.

          Viele Gruesse

          Joerg

      2. Hi!

        Dies funktioniert nur, wenn der User den vollen Domainnamen angibt. Laesst er "www." weg, habe ich ein Problem. Wie kann ich das abfangen?

        Also dieses Script willst Du anstelle der error404-Datei einsetzen, richtig? Dann sag doch bitte mal, was noch als QueryString mitgegeben wird. Offensichtlich ist ja dort der urspruengliche Request angegeben, sonst haettest Du das

        name = Mid( Request.ServerVariables("QUERY_STRING"),23,8)

        nicht gemacht.

        Jetzt ist nur noch die Frage, wie kann ich die URL aufrufen ohne das der User was davon merkt. Ich denke da an ein Frameset.
        Ich weiss nur noch nicht wie das mit dem Frameset funktionieren kann.

        Also ich wuerde sagen, entweder Frameset oder Redirect, da musst Du Dich entscheiden. Bei der zweiten Moeglichkeit wird auf jeden Fall die neue URL in der Location bar des Browsers zu sehen sein. Fuer ein Frameset musst Du halt sowas in der Art ausgeben:

        <FRAMESET ROWS="100%,%" [und weitere Angaben]>
            <FRAME SRC="<%=name%>" [weitere Angaben]>
        </FRAME>

        Fuer die Angaben, die man bei Frames so alle machen kann, schau mal bei <../../tcib.htm>.

        Calocybe

        1. Also dieses Script willst Du anstelle der error404-Datei einsetzen, richtig? Dann sag doch bitte mal, was noch als QueryString mitgegeben wird. Offensichtlich ist ja dort der urspruengliche Request angegeben, sonst haettest Du das

          name = Mid( Request.ServerVariables("QUERY_STRING"),23,8)
          nicht gemacht.

          Genau, so ist es.
          Der User ruft nur "http://www.mydomain.de/12345678" auf. Dies war fuer mich die einzige Moeglichkeit die 8-stellige Nummer an die andere URL anzuhaengen.
          Hast Du einen anderen Vorschlag?

          Das mit dem Frameset schaue ich mir nochmal an.

          Danke

          Joerg

          1. Hallo!

            Hast Du einen anderen Vorschlag?

            Nein, ich finde die Idee gut. Meine Frage war nur, was genau diesem "Error-Handler" als QueryString uebergeben wird. Nun, wenn ich mir diese Zeile nochmal genau anschaue,

            name = Mid( Request.ServerVariables("QUERY_STRING"),23,8)

            dann nehme ich an, dass die 404-Datei schlicht und einfach mit
                error404.asp?http://www.mydomain.de/12345678
            aufgerufen wird, denn Du wolltest dieses 123465678 ausschneiden (hast Dich aber um eine Stelle vertan, es faengt erst bei 24 an (bei Basic-Strings hat das erste Zeichen die Nummer 1, nicht 0)).

            Nun, wenn diese "Verzeichnisse" immer aus 8 Ziffern bestehen, kannst Du mit
                s = Request.ServerVariables("QUERY_STRING")
                s = mid(s, 7)                       ' schneidet "http://" weg
                s = mid(s, instr(s, "/")+1, 8)      ' sucht den ersten / und nimmt die 8 Zeichen _dahinter_
                Response.Redirect("http://www.andereDomain.de/scripts/run.dll?Login:" & s)
            die Sache erledigen.

            Viel Spass beim Ausprobieren
            Calocybe