Linuchs: Subdomain anlegen als root oder per FTP

Hallo,

den Aufruf meines Veranstaltungskalenders möchte ich mit Subdomains menschenwürdiger gestalten.

Anstatt den Ort Dornheim mit www.remso.org/?ORT=13522 aufzurufen (was sich keine Sau merken kann) möchte ich ihn auch unter www.dornheim.remso.org anbieten.

Eine Oberfläche meines "Providers" kenne ich nicht, ich kann mich als root anmelden, da kommt aber nur der Eingabe-Prompt ;-)

Nun habe ich hier eine Anleitung gefunden, die aber nicht funktioniert. Habe eine .htaccess Datei erstellt und per FTP in das Verzeichnis geladen, in dem sich auch die Startseite index.php befindet.

Die Anleitung:

mod_rewrite einschalten
Normalerweise ist diese Funktion standardmäßig nicht aktiviert. Deshalb muß die erste Zeile in der .htaccess-Datei lauten:
RewriteEngine On

Diese Zeilen veranlassen den Server, die neue Subdomain ‘tools’ in der Domain ‘meinedomain.de’ zu aktivieren und in den Ordner ‘neuetools’ zu leiten.
RewriteCond %{HTTP_HOST} tools.meinedomain.de $ [NC]
RewriteCond %{REQUEST_URI} !/neuetools/
RewriteRule ^(.*)$ neuetools/ [L]

Meine .../domains/remso.org/public_html/.htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} doku.remso.org $ [NC]
RewriteCond %{REQUEST_URI} !/doku/
RewriteRule ^(.*)$ doku/ [L]

Nach dem Hochladen meldet der Aufruf http://remso.org
Internal Server Error

doku.remso.org meldet
It works! 2009-05-15 18:35

Habe ich da grundsätzlich was falsch verstanden oder ist die Anleitung unsinnig?

Linuchs

  1. Nachtrag: Betriebssystem ist Debian.

  2. Tach!

    den Aufruf meines Veranstaltungskalenders möchte ich mit Subdomains menschenwürdiger gestalten.
    Nun habe ich hier eine Anleitung gefunden, die aber nicht funktioniert. Habe eine .htaccess Datei erstellt und per FTP in das Verzeichnis geladen, in dem sich auch die Startseite index.php befindet.

    Bist du dir darüber im Klaren, wie das mit dem Web im Hintergrund abläuft? Da wäre ja als erstes der Domain-Name, den das DNS auflösen muss. Entweder legst du für jede Domain einen Datensatz - oder auch zwei, weil du auch noch www davor haben willst - im DNS an, der auf die IP-Adresse des Web-Servers zeigt, oder du hast einen DNS-Server zur Verfügung, der Catch-All kann, und dann alles inklusive Schreibfehler auf eine IP zeigen lässt. Punkt zwei ist, dass der Apache den Hostnamen auswerten muss, um den passenden VHost zu finden. Wenn du nur einen hast, dann landet sowieso alles dort, dann geht vermutlich auch das Rewriting aus dem Beispiel. Wenn du aber namensbasierende (namebased) VHosts hast, dann muss es einen zu den Domain-Namen passenden ServerName oder ServerAlias geben, der den Ziel-Vhost für den Request bestimmt. Auch da gibt es die Möglichkeit des Catch-All, also *.example.com und/oder *.subdomain.example.com anzugeben. Gibt es keinen solchen, wird der erste VHost in der Konfiguration genommen, der somit als Default-VHost dient. Normalerweise will man nicht, dass alles was die DNS-Auflösung überstanden hat und keinen VHost zum Hostnamen findet, auf dem zufällig als erstem Vhost konfigurierten und produktiven System landet, weswegen man den ersten VHost besser lediglich als Auffangbecken für solche Fehler verwendet, besonders wenn mehrere Projekte auf einem Server lagern.

    Nach dem Hochladen meldet der Aufruf http://remso.org
    Internal Server Error

    Das Error-Log gibt bei 500er Fehlern einen genaueren Text. Ansonsten sind die öffentlichen Texte der 500er absichtlich nichtssagend allgemein gehalten.

    doku.remso.org meldet
    It works! 2009-05-15 18:35

    Das ist dann wohl der nicht näher mit Inhalt hinterlegte Default-VHost.

    dedlfix.

    1. Moin,

      Bist du dir darüber im Klaren, wie das mit dem Web im Hintergrund abläuft?

      Eigentlich keine Ahnung. Bin Anwendungsprogrammierer und habe das immer machen lassen. Aber nun kommt eine Serie auf mich zu ...

      Da wäre ja als erstes der Domain-Name, den das DNS auflösen muss. Entweder legst du für jede Domain einen Datensatz - oder auch zwei, weil du auch noch www davor haben willst - im DNS an, der auf die IP-Adresse des Web-Servers zeigt, oder du hast einen DNS-Server zur Verfügung, der Catch-All kann, und dann alles inklusive Schreibfehler auf eine IP zeigen lässt.

      DNS ist doch ein fremder Server, auf den ich keinen Zugriff habe, oder? Wie könnte *ich* dort was anlegen?

      Punkt zwei ist, ... das Rewriting ... namensbasierende (namebased) VHosts ... ServerName oder ServerAlias ... Ziel-Vhost ... Request bestimmt ... Catch-All, ...

      Verstehe kein Wort, sorry.

      Der Vorschlag "Warum nicht remso.org/dornheim?" von "del" ist nicht schlecht, aber ist dornheim.remso.org tatsächlich so ein Umstand?

      Auf einem anderen Server, der *nicht* mir gehört, aber eine Admin-Oberfläche hat, war das Anlegen von Subdomains super-einfach.

      Linuchs

      1. Hallo,

        Der Vorschlag "Warum nicht remso.org/dornheim?" von "del" ist nicht schlecht, aber ist dornheim.remso.org tatsächlich so ein Umstand?

        ja, weil du neue Hostnamen erzeugen willst.

        Ich vergleiche das mal so: Du besitzt für dein Unternehmen Remsolix ein großes Bürogebäude (dein root-Server) mit viel Platz in der Industriestraße 4, aber eben mit nur einer einzigen Postanschrift (dein Hostname remso.de bzw. dessen Alias www.remso.de). Bis jetzt wird anscheinend alles, was die ankommenden Leute von dir wollen, an verschiedenen Schreibtischen im großzügig gestalteten Foyer erledigt.

        Nun möchtest du etwas mehr Gliederung in das Konzept bringen. Dein Ansatz: Jedes einzelne Büro, das für eine Stadt zuständig ist, bekommt nun formal seinen eigenen Niederlassungs-Namen wie Remsolix Mannheim, Remsolix Leipzig oder Remsolix Kiel (eigener Hostname als Subdomain). Problem: Du musst viele neue Firmennamen bekanntmachen, die dann alle in der Industriestraße 4 ansässig sind (DNS-Einträge für die neuen Hosts), und du musst im Foyer jemand hinsetzen, der den Ankommenden sagt, in welchem Büro sie die gesuchte Niederlassung finden (URL Rewriting).

        Alternative von del: Du behältst das Konzept mit nur einem Firmennamen bei, stellst aber im Foyer eine große Wegweiser-Tafel auf. Den netten Helfer, der da am Eingang sitzt, brauchst du eventuell immer noch, falls mal jemand mit dem Wegweiser überfordert ist, aber du brauchst nicht Dutzende von zusätzlichen Firmennamen _nach außen_ bekanntzumachen.

        Auf einem anderen Server, der *nicht* mir gehört, aber eine Admin-Oberfläche hat, war das Anlegen von Subdomains super-einfach.

        Mag sein. Trotzdem gehören immer zwei Sachen dazu: Die Subdomain muss im DNS registriert werden, und der Server muss auf den neuen Domainnamen reagieren. Kann ja sein, dass das Admin-Tool immer gleich beides erledigt, vor allem wenn der Provider auch einen eigenen DNS-Server zur Verfügung stellt, dessen Einträge du selbst bearbeiten kannst (eigentlich die Regel bei größeren Anbietern).

        Ich habe aber den Eindruck, dass du entweder auf diese doch relativ aufwendige Idee verzichten, oder dir die Hilfe von jemandem holen solltest, der das aus dem FF (oder dezimal 255) beherrscht.

        Ciao,
         Martin

        --
        Theorie ist, wenn jeder weiß, wie's geht, und es geht trotzdem nicht.
        Praxis ist, wenn's geht, und keiner weiß warum.
        Bei uns sind Theorie und Praxis vereint: Nichts geht, und keiner weiß warum.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      2. Hi,

        Auf einem anderen Server, der *nicht* mir gehört, aber eine Admin-Oberfläche hat, war das Anlegen von Subdomains super-einfach.

        wieviele Orte sollen es denn werden? Ich bin jetzt davon ausgegangen, dass es sich um eine sehr große Zahl handeln wird, die eventuell stetig wächst. Wenn deine Applikation sauber routet, dann brauchst du vermutlich überhaupt keine Verzeichnisse ala /dornheim anzulegen. Und meines Erachtens ist so auch eine feinere regionale Gliederung möglich, falls irgendwann einmal benötigt:

        rmso.org/dornheim
        rmso.org/muenchen/schwabing
        rmso.org/deutschland/berlin/mitte

        vs.

        dornheim.rmso.org
        muenchen.schwabing.remso.org
        deutschland.berlin.mitte.remso.org

        1. Hello,

          wieviele Orte sollen es denn werden? Ich bin jetzt davon ausgegangen, dass es sich um eine sehr große Zahl handeln wird, die eventuell stetig wächst. Wenn deine Applikation sauber routet, dann brauchst du vermutlich überhaupt keine Verzeichnisse ala /dornheim anzulegen. Und meines Erachtens ist so auch eine feinere regionale Gliederung möglich, falls irgendwann einmal benötigt:

          rmso.org/dornheim
          rmso.org/muenchen/schwabing
          rmso.org/deutschland/berlin/mitte

          vs.

          dornheim.rmso.org
          muenchen.schwabing.remso.org
          deutschland.berlin.mitte.remso.org

          dito.

          Aber man sollte von Anfang an auch dafür sorgen, dass das Routing nicht "hart" in den Rewrite-Regeln stattfindet, sondern eben in einem Auswertemodul, dass dann auch Vorschläge ermitteln kann für den nicht mehr aus dem Stand auflösbaren Teil des Requests

          Und in der anderen Richtung (Response) dürfen dann keine URi's entstehen, alà

          www.example.org/page=298756328353987?optime

          sondern eben

          rmso.org/deutschland/berlin/mitte/gastronomie/zum-schultheiss/?optime

          oder auch

          rmso.org/deutschland/berlin/zum-schultheiss/?optime

          Das sollte dann als Request ggf. auch wiedergefunden werden. Dazu bedarf es natürlich einer sehr intelligenten Lösung für das "Routing-Modul".

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bikers-lodge.com
        2. Mahlzeit,

          wieviele Orte sollen es denn werden? Ich bin jetzt davon ausgegangen, dass es sich um eine sehr große Zahl handeln wird, die eventuell stetig wächst.

          Tja, erstmal eine einstellige Zahl zum Testen.

          rmso.org/dornheim
          rmso.org/muenchen/schwabing
          rmso.org/deutschland/berlin/mitte

          Hier sehe ich die Problematik, dass tatsächlich diese Verzeichnisse anzulegen sind.

          Wie wäre es denn, wenn es die Verzeichnisse nicht gibt und ich könnte im Fehlfalle die Eingabe auswerten. Wie macht Wikipedia das denn, wenn ich als URL angebe:
          http://de.wikipedia.org/wiki/Dornem (Dornem ist der Dialekt von Dornheim)
          Da kommt kein Fehler, sondern eine Seite, die Ratschläge gibt.

          Vielleicht ist das die Lösung, wie wäre der Ansatz?
          Bei http://remso.org/dornem kommt schlicht "not found"

          Bisher läuft alles über drei zentrale index.php (remso.de, .eu und .org), die zugeordneten Programme, abhängig von den Parametern, sind dann aber gemeinsam. Das hat sich sehr gut bewährt.

          Linuchs

          1. Hello,

            Tja, erstmal eine einstellige Zahl zum Testen.

            rmso.org/dornheim
            rmso.org/muenchen/schwabing
            rmso.org/deutschland/berlin/mitte

            Hier sehe ich die Problematik, dass tatsächlich diese Verzeichnisse anzulegen sind.

            Wie wäre es denn, wenn es die Verzeichnisse nicht gibt und ich könnte im Fehlfalle die Eingabe auswerten. Wie macht Wikipedia das denn, wenn ich als URL angebe:
            http://de.wikipedia.org/wiki/Dornem (Dornem ist der Dialekt von Dornheim)
            Da kommt kein Fehler, sondern eine Seite, die Ratschläge gibt.

            Vielleicht ist das die Lösung, wie wäre der Ansatz?
            Bei http://remso.org/dornem kommt schlicht "not found"

            Da verweise ich mal zurück auf einen Thread, der eigentlich aus einem anderen Grund entstanden war:

            https://forum.selfhtml.org/?t=216575&m=1485267

            Und ich konnte bisher noch keinen wirklichen Strich unter die Diskussion ziehen, obwohl sie ja schon viele Facetten aufgegriffen hat.

            Ich hänge im Moment an der Frage: wann sind eigentlich die HTTP-Status-Codes eingeführt worden? Hat die Sir Tim schon erfunden? Der kannte ja ursprünglich auch nur den GET-Request. Die Antworten in obigem Thread erscheinen mir teilweise sehr engstirnig und berücksichtigen mMn nicht die Entwicklung.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            http://bikers-lodge.com
            1. Ich hänge im Moment an der Frage: wann sind eigentlich die HTTP-Status-Codes eingeführt worden?

              1945

              \0

          2. Wie macht Wikipedia das denn, wenn ich als URL angebe:
            http://de.wikipedia.org/wiki/Dornem (Dornem ist der Dialekt von Dornheim)
            Da kommt kein Fehler, sondern eine Seite, die Ratschläge gibt.

            Habe da was gefunden.
            .htaccess im Web-Stammverzeichnis
            ErrorDocument 404 /_text/impressum.php

            Jetzt kommt tatsächlich das Impressum statt "not found"

            Ist sehr verdächtig, weil so einfach. Was ist zu beachten?

            Linuchs

            1. Hello,

              Wie macht Wikipedia das denn, wenn ich als URL angebe:
              http://de.wikipedia.org/wiki/Dornem (Dornem ist der Dialekt von Dornheim)
              Da kommt kein Fehler, sondern eine Seite, die Ratschläge gibt.

              Habe da was gefunden.
              .htaccess im Web-Stammverzeichnis
              ErrorDocument 404 /_text/impressum.php

              Jetzt kommt tatsächlich das Impressum statt "not found"

              Ist sehr verdächtig, weil so einfach. Was ist zu beachten?

              Keinen zirkulären Verlauf bauen...

              Lies Dir mal ruhig den verlinkten Thread vorher durch. Der ist noch nicht zuende gedacht, aber erspart Dir wahrscheinlich einige eigene Denkschleifen.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bikers-lodge.com
          3. Hallo,

            rmso.org/dornheim
            rmso.org/muenchen/schwabing
            rmso.org/deutschland/berlin/mitte

            Hier sehe ich die Problematik, dass tatsächlich diese Verzeichnisse anzulegen sind.

            Warum? Du kannst doch die Route "deutschland/berlin/mitte" auseinandernehmen, wie du willst.
            Einfaches Beispiel: aus deutschland/berlin/mitte wird zum Beispiel

            country = deutschland
            city = berlin
            district = mitte

            mit diesen 3 Werten könntest du dann zum Beispiel eine DB-Abfrage machen. Da brauchts keine physischen Directories. Das muss auch nicht direkt über htaccess umgeschrieben werden.

      3. Tach!

        DNS ist doch ein fremder Server, auf den ich keinen Zugriff habe, oder? Wie könnte *ich* dort was anlegen?

        Beim Provider hat man als Kunde oftmals die Möglichkeit, über ein Tool die DNS-Konfiguration zu verändern. Zum Beispiel zum Zwecke der Subdomain-Erstellung.

        Punkt zwei ist, ... das Rewriting ... namensbasierende (namebased) VHosts ... ServerName oder ServerAlias ... Ziel-Vhost ... Request bestimmt ... Catch-All, ...

        Verstehe kein Wort, sorry.

        Dann solltest du mal die Grundlagen der Apache-VHost-Konfiguration zu Gemüte führen, wenn du in die Bereiche vordringst, in denen du sie benötigst.

        Auf einem anderen Server, der *nicht* mir gehört, aber eine Admin-Oberfläche hat, war das Anlegen von Subdomains super-einfach.

        Du möchtest garantiert nicht für jeden Ort händisch eine Subdomain verwalten müssen. (Unabhängig davon, ob das Konzept als solches sinnvoll ist oder nicht.)

        dedlfix.

  3. Hallo,

    Anstatt den Ort Dornheim mit www.remso.org/?ORT=13522 aufzurufen (was sich keine Sau merken kann) möchte ich ihn auch unter www.dornheim.remso.org anbieten.

    Warum nicht remso.org/dornheim?

    Ansonsten Stichwort wildcard subdomains. In meinen Augen aber hier ziemlich unsinnig.

  4. Mahlzeit,

    Nach dem Hochladen meldet der Aufruf http://remso.org
    Internal Server Error

    Wenn du vollen Zugriff auf den Server hast, hast du damm das Errorlog gelesen?

    --
    42
    1. Hallo,

      Wenn du vollen Zugriff auf den Server hast, hast du damm das Errorlog gelesen?

      Wenn du richtig fluchen möchtest, solltest du es "damn" schreiben!

      scnr
      Kalk

  5. Anstatt den Ort Dornheim mit www.remso.org/?ORT=13522 aufzurufen (was sich keine Sau merken kann) möchte ich ihn auch unter www.dornheim.remso.org anbieten.

    Mache das jetzt wie diskutiert, z.B. www.remso.org/dornheim

    Da es das Verzeichnis dornheim nicht gibt, wir die Datei error_404.php gestartet und die Eingabe ausgewertet. Im Moment setze ich $_GET['ORT'] = 13522 und include dann die ursprüngliche, unveränderte index.php, als hätte ich sie mit dem Parameter ORT=13522 aufgerufen.

    So weit, so gut. Doch nun hätte ich gerne weitere Parameter zur Layout-Steuerung. Da stelle ich fest, dass bei www.remso.org/dornheim?param=1 $_GET['param'] leer ist. Wird das GET array im Fehlerfall 404 gelöscht?

    Linuchs

    1. Hello,

      So weit, so gut. Doch nun hätte ich gerne weitere Parameter zur Layout-Steuerung. Da stelle ich fest, dass bei www.remso.org/dornheim?param=1 $_GET['param'] leer ist. Wird das GET array im Fehlerfall 404 gelöscht?

      Die Error-Dokumente werden per URL-Umleitung aufgerufen, also nicht einfach ersatzweise ausgeliefert.

      http://httpd.apache.org/docs/current/custom-error.html

      Das bedeutet, dass es sich um einen neuen Request handelt. Der hat dann auch neue Request-Parameter.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bikers-lodge.com
    2. Hello,

      vielleicht hilft Dir diese kleine Anregung weiter?

        
        
      <?php  ### error404.php  
        
      echo "<pre>\r\n";  
      echo htmlspecialchars(print_r($_GET,1)) . "\r\n";  
        
      if (isset($_SERVER['REDIRECT_QUERY_STRING']))  
      {  
          echo htmlspecialchars(print_r($_SERVER['REDIRECT_QUERY_STRING'],1)) . "\r\n";  
        
          parse_str($_SERVER['REDIRECT_QUERY_STRING'], $_query);  
          echo htmlspecialchars(print_r($_query,1)) . "\r\n";  
        
      }  
      echo "<pre>\r\n";  
        
      ?>  
      
      

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bikers-lodge.com
    3. Anstatt den Ort Dornheim mit www.remso.org/?ORT=13522 aufzurufen (was sich keine Sau merken kann) möchte ich ihn auch unter www.dornheim.remso.org anbieten.

      Mache das jetzt wie diskutiert, z.B. www.remso.org/dornheim

      Da es das Verzeichnis dornheim nicht gibt, wir die Datei error_404.php gestartet und die Eingabe ausgewertet. Im Moment setze ich $_GET['ORT'] = 13522 und include dann die ursprüngliche, unveränderte index.php, als hätte ich sie mit dem Parameter ORT=13522 aufgerufen.

      Ich möchte das jetzt hier nicht im Detail besprechen, wie das funktioniert, nur ein paar Hinweise.

      • Es gibt kein Verzeichnis dornheim, es wird auch gar nicht versucht, das Verzeichnis "dornheim" aufzurufen.(Es wird also auch keine errorseite aufgerufen, weil dieser Ansatz unsinnig ist). In der htaccess leitest du alles auf die index.php weiter und verarbeitest dort den Request. Anhand der extrahierten ID oder des extrahierten paths wird dann vermutlich eine Datenbankabfrage folgen.

      • Ich weiß nicht, wie Dein Regionsmapping aussieht. Aber ich gehe mal davon aus, dass jede Region eine ID hat. In einer Datenbank könnte man also ein Mapping anlegen, welches in etwa so aussieht:
        region_id | url_name     region_name
        -----------------------|
        13522     | dornheim   | Dornheim
        13522     | wolfsbach  | Wolfsbach (Thüringen)

      Wie gesagt, nur ein sehr simples Beispiel.

      1. Hello,

        Ich möchte das jetzt hier nicht im Detail besprechen, wie das funktioniert, nur ein paar Hinweise.

        • Es gibt kein Verzeichnis dornheim, es wird auch gar nicht versucht, das Verzeichnis "dornheim" aufzurufen.(Es wird also auch keine errorseite aufgerufen, weil dieser Ansatz unsinnig ist). In der htaccess leitest du alles auf die index.php weiter und verarbeitest dort den Request. Anhand der extrahierten ID oder des extrahierten paths wird dann vermutlich eine Datenbankabfrage folgen.

        und hier als Ergänzung deines Postings noch
        eine kurze Anregung, welche Rewrites man ausprobieren könnte:

        .htaccess

        RewriteEngine on
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-f
        #RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-l
        #RewriteRule .* - [L]
        #RewriteRule .* index.php [L]

        RewriteRule (.*) index.php/$1 [QSA]
        #RewriteRule .* index.php?%{THE_REQUEST}
        #RewriteRule .* index.php?url=%{REDIRECT_URL}&query=%{REDIRECT_QUERY_STRING}

        Ich selber benutze nur die nicht auskommentierten.
        Damit landet jeder Request in der /index.php und gibt den Path und den Querystring mit.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bikers-lodge.com