Roland: htaccess und Subdomain

Hallo,

das ist mein erster Beitrag hier.
Habe schon (fast?) alles zum Thema htaccess hier gelesen.
Ich habe auch schon die :
http://httpd.apache.org/docs/mod/mod_rewrite.html
aufgerufen. Nur bin ich halt kein KonfigurationsTalent und die Seite sieht für mich aus wie ein Buch mit 1000 Siegeln. Da verstehe ich Bahnhof.
Ich hoffe, Ihr könnt mir weiterhelfen.

Ich möchte den Aufruf einer Subdomain :
sub.meineWeb.de
auf meinWeb.de/index.php?id=120
"umleiten"
In der Adressleiste des Browsers soll weiterhin http://sub.meineWeb.de stehen bleiben.

  • meinWeb.de und die darunterliegenden Dateien und Verzeichnisse liegen auf home/meineWeb.de/htdocs/. . .
  • die index auf die verwiesen werden soll:
      home/meineWeb.de/htdocs/index.php
  • die Subdomain im Verzeichnis "subdomain" auf:
      home/meineWeb.de/htdocs/subdomain

Ich bekomme es nicht in die Reihe.

Egal was ich eintrage/eingetragen habe, in die htaccess:
RewriteCond . . . sub.meineWeb.de . . .
RewriteRule . . . index.php?id=120
Ich muss immer:
  RewriteRule . . . http://meineWeb.de/index.php?id=120
also "http://..." angeben. Damit erscheint beim Aufruf von:
  "sub.meineWeb.de" im Browser auch die richtige Seite.
Allerdings in der Adressleiste :
   http://meineWeb.de/index.php?id=120 :( :( :(

In der Adressleiste des Browsers soll aber weiterhin :
   http://sub.meineWeb.de/
oder meinetwegen auch:
   http://sub.meineWeb.de/index.php?id=120
erscheinen.

Gibt es dafür eine Lösung?

Mit freundlichen Grüßen
Roland

  1. Hi,

    Ich möchte den Aufruf einer Subdomain :
    sub.meineWeb.de
    auf meinWeb.de/index.php?id=120
    "umleiten"

    Du möchtest also von http://irgendwo/ auf http://ganzwoanders/foobar umleiten.

    In der Adressleiste des Browsers soll weiterhin http://sub.meineWeb.de stehen bleiben.

    Diese Möglichkeit glänzt durch Nichtexistenz. Der einzige Weg dazu ist a) durch bloße Serverkonfiguration nicht zu erreichen und b) ein *massiver* Qualitätsverlust Deiner Site, weswegen ich auch nicht weiter darauf eingehe.

    Ich bekomme es nicht in die Reihe.

    Falls es Dich beruhigt: Das liegt nicht an Dir. Die Grundlagen von HTTP verbieten derlei Dinge.

    Ich muss immer: [...] also "http://..." angeben.

    Sicher. Zu einem Fremdhost existiert keine relative URI.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,
      danke für die schnelle Antwort.

      Ich möchte den Aufruf einer Subdomain :
      sub.meineWeb.de
      auf meinWeb.de/index.php?id=120
      "umleiten"

      Du möchtest also von http://irgendwo/ auf http://ganzwoanders/foobar umleiten.

      Ne, nur von :
      http://sub.irgendwo
      http://irgendwo/index.php?id=120

      dabei liegt die Subdomain "sub.irgendwo"
      in/auf dem Ordner /irgendwo/subdomain im gleichem Server auf der gleichen Domain
      könnte also auch im Browser http://irgendwo/subdomain eingeben, nur soll das hier garnicht erwähnt werden.
      Es geht um
      -   http://sub.irgendwo.de (dort existieren keine Datein (außer die .htaccess, und auch keine Verzeichnisse)
      Angezeigt wird (soll werden, wenn`s denn ginge):
      -   http://irgendwo.de/index.php?id=120
      Im Browserfenster soll stehen (wenn´s denn ginge)

      • http://sub.irgendwo.de
        oder eben
      • http://sub.irgendwo.de/index.php?id=120

      Nur sind für mich halt alles Böhmische Dörfer, was da in die .htaccess hinein geschrieben werden muß/darf/kann/soll :( :( :(

      In der Adressleiste des Browsers soll weiterhin http://sub.meineWeb.de stehen bleiben.

      Diese Möglichkeit glänzt durch Nichtexistenz. Der einzige Weg dazu ist a) durch bloße Serverkonfiguration nicht zu erreichen und b) ein *massiver* Qualitätsverlust Deiner Site, weswegen ich auch nicht weiter darauf eingehe.

      Ich bekomme es nicht in die Reihe.

      Falls es Dich beruhigt: Das liegt nicht an Dir. Die Grundlagen von HTTP verbieten derlei Dinge.

      Ich muss immer: [...] also "http://..." angeben.

      Sicher. Zu einem Fremdhost existiert keine relative URI.

      :( :( :(

      Und ich habe immer wieder gelesen, die .htaccess wäre DAS Schweizer Messer, und die .htaccess wäre DER Große Zauber schlechthin.

      NA ja . . .

      Mit freundlichen Grüßen
      Roland

      1. Moin!

        Ich möchte den Aufruf einer Subdomain :
        sub.meineWeb.de
        auf meinWeb.de/index.php?id=120
        "umleiten"

        Du möchtest also von http://irgendwo/ auf http://ganzwoanders/foobar umleiten.

        Ne, nur von :
        http://sub.irgendwo
        http://irgendwo/index.php?id=120

        Du hast die Antwort nicht verstanden.

        Tatsache ist: Du hast zwei unterschiedliche Domains. Dass das eine eine Subdomain des anderen ist, ist vollkommen egal, es sind _zwei_verschiedene_Domains. Also in der Tat "irgenwo" und "ganzwoanders" - zumindest aus der Sicht von HTTP.

        Und jetzt kommt Apache ins Spiel. Und stellt fest, dass ein Virtual Host sich angesprochen fühlen soll.

        Dieser VHost hat ganz bestimmte Einschränkungen. Eine davon ist: Liefere NICHTS aus, was in Verzeichnissen oberhalb des HTTP-Hauptverzeichnisses steht. Sicherheitsgründe. Sonst könnte man als Internetuser Dinge sehen, an die man nicht rankommen darf!

        Daraus folgt: Wenn du dich innerhalb deiner Subdomain befindest, kriegst du alles, was in deinem Verzeichnis "subdomain" liegt, und alles, was noch tiefer darunter liegt, aber _nichts_, was darüber liegt. Auch nicht dein index.php eine Verzeichnisebene höher.

        Und da mod_rewrite einen HTTP-Request bei interner Behandlung ausschließlich in weitere HTTP-Requests derselben Domain wandeln kann, kommst du auch mit mod_rewrite nirgendwo nach oberhalb deines Subdomainverzeichnisses.

        Und ich habe immer wieder gelesen, die .htaccess wäre DAS Schweizer Messer, und die .htaccess wäre DER Große Zauber schlechthin.

        Stimmt nicht ganz. DAS Schweizer Messer ist die httpd.conf - mit .htaccess kann man längst nicht alles machen.

        - Sven Rautenberg

        --
        "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
        1. Hallo,

          . . .

          Und da mod_rewrite einen HTTP-Request bei interner Behandlung ausschließlich in weitere HTTP-Requests derselben Domain wandeln kann, kommst du auch mit mod_rewrite nirgendwo nach oberhalb deines Subdomainverzeichnisses.

          Vielen Dank für die verständliche Antwort.

          Und ich habe immer wieder gelesen, die .htaccess wäre DAS Schweizer Messer, und die .htaccess wäre DER Große Zauber schlechthin.

          Stimmt nicht ganz. DAS Schweizer Messer ist die httpd.conf - mit .htaccess kann man längst nicht alles machen.

          Wenn ich das jetzt richtig verstanden habe, so ist das evtl. über die httpd.conf zu lösen und ich sollte wohl meinen Provider hinsichtlich dieses Wunsches ansprechen? An der httpd.conf darf und kann ich nichts ändern.

          Einen schönen Tag wünscht
          Roland

          1. Moin!

            Und da mod_rewrite einen HTTP-Request bei interner Behandlung ausschließlich in weitere HTTP-Requests derselben Domain wandeln kann, kommst du auch mit mod_rewrite nirgendwo nach oberhalb deines Subdomainverzeichnisses.

            Wenn ich das jetzt richtig verstanden habe, so ist das evtl. über die httpd.conf zu lösen und ich sollte wohl meinen Provider hinsichtlich dieses Wunsches ansprechen? An der httpd.conf darf und kann ich nichts ändern.

            Naja, hängt davon ab.

            Zwischen den Zeilen wollte ich andeuten, dass deine Wahl des Verzeichnisortes suboptimal für deine Anforderungen ist. Die Wahl der Mittel kann so nicht zum Erfolg führen. Das bedeutet aber natürlich nicht, dass andere Mittel auch scheitern.

            Eine Methode wäre es beispielsweise, als index.html der Subdomain ein Skript abzulegen, welches seinerseits die gewünschte URL abfragt und 1:1 durchreicht.

            Alternativ: Subdomainverzeichnis identisch mit dem Hauptdomainverzeichnis machen und per mod_rewrite individuell abfragen, ob ein Request für die Subdomain reinkommt - und dann URL-Rewriting machen. Bedenke: Wenn du dich im Verzeichnis der Hauptdomain befindest, kann mod_rewrite auf derselben Verzeichnisebene ja arbeiten.

            Dritte Alternative: Das Hauptverzeichnis als Alias definieren (geht mit .htaccess nicht). Dadurch hast du in der Subdomain ein weiteres, aber nur virtelles Unterverzeichnis, welches intern (und mit einem anderen Modul) in den URL-Verzeichnisbaum gemappt wird, aber für mod_rewrite im Prinzip zugänglich sein dürfte.

            Aber natürlich kann dir dein Provider unter Umständen auch helfen. Hängt wirklich ganz davon ab, was bei dem geht (im Prinzip geht alles, aber was kann der individuell regeln?).
             - Sven Rautenberg

            --
            "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
            1. Hallo Sven,

              den Brocken muß ich nun erst mal verarbeiten und verdauen.

              Inzwischen eine Frage.
              Weshalb funktioniert das dann mit :

              RewriteEngine On
              RewriteRule ^(.*) http://meineSeitexyz.de/index.php?id=123$1 [P]

              Als Adresse im Browser bleibt die "alte" bestehen, die meineSeite.de/index.php?id=123 wird im Browser angezeigt.

              Das dabei die zugewiesenen css-Dateien und auch die an die index.php angehängten IDs nicht mehr funktionieren, sei zunächst mal nebensächlich.

              MFG
              Roland

              1. Moin!

                Weshalb funktioniert das dann mit :

                RewriteEngine On
                RewriteRule ^(.*) http://meineSeitexyz.de/index.php?id=123$1 [P]

                Mit dem [P] legst du fest, dass Apache intern als Proxy arbeiten und die angegebene Adresse aufrufen soll.

                Sowas funktioniert natürlich, aber es verursacht doppelten Traffic. Denn einmal wird das Ergebnis natürlich vom Server an den Browser geschickt, aber damit das passieren kann, wird intern ein ganz offizieller Request an die andere Adresse geschickt.

                Du hast es hier also mit zwei Requests zu tun, die so auch beide in den Logfiles auftauchen dürften. Außerdem kostet diese Vorgehensweise natürlich Performance und erfordert eine gewisse Zeit bis zur Beantwortung des Requests, weil der Apache intern den anderen Servernamen auflösen muß.

                - Sven Rautenberg

                --
                "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
                1. Hallo Sven,

                  vielen Dank für Deine Antwort.
                  Wenn es nur auf alle Fragen hier im Forum solche präzisen und leicht verständlichen Antworten gäbe. Dir und Allen anderen die hier uneigennützig Fragenden hilfreich zur Seite stehen meinen herzlichsten Dank.

                  Kennt jemand eine Adresse, auf der die deutsche Übersetzung von
                  http://httpd.apache.org/docs/howto/htaccess.html
                  und
                  http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html
                  zu finden ist.

                  Beide, besonders aber mod_rewrite sind so umfangreich und komplex, das OttoNormalUser doch gern eine verständliche Fassung vorliegen hätte. Danke.

                  MFG
                  Roland

  2. Hallo,

    . . .

    Ich bekomme es nicht in die Reihe.

    Egal was ich eintrage/eingetragen habe, in die .htaccess:
    RewriteCond . . . sub.meineWeb.de . . .
    RewriteRule . . . index.php?id=120
    Ich muss immer:
      RewriteRule . . . http://meineWeb.de/index.php?id=120
    also "http://..." angeben. Damit erscheint beim Aufruf von:
      "sub.meineWeb.de" im Browser auch die richtige Seite.
    Allerdings in der Adressleiste :
       http://meineWeb.de/index.php?id=120 :( :( :(

    In der Adressleiste des Browsers soll aber weiterhin :
       http://sub.meineWeb.de/
    oder meinetwegen auch:
       http://sub.meineWeb.de/index.php?id=120
    erscheinen.

    »»

    Ich habe es jetzt noch einmal versucht.

    Wenn ich den Ordner auf dem die Subdomain liegt direkt im Browser aufrufe
    http://meineWeb.de/subdomain

    Dann wird auch die Indexdatei eine Ebene höher aufgerufen und dargestellt.

    Im Browser bleibt die Adresszeile weiterhin auf:
    http://meineWeb.de/subdomain
    stehen. So wie sie es auch soll.

    Das Ganze funktioniert mit folgenden Angaben in der .htaccess (teilweise).
    Teilweise deshalb, weil z.B. Referenzen auf css-Dateien nicht richtig dargestellt werden in der index.php :(

    RewriteEngine on
    RewriteRule ^$ ../index.php?id=123

    Was ich nicht verstehe ist, warum funktioniert es nicht, daß die Adresszeile im Browser auf
    http://sub.meineWeb.de
    stehen bleibt wenn ich Einträge in der .htaccess folgendermaßen auschauen:
    RewriteEngine on
    RewriteCond . . . sub.meineWeb.de . . .
    RewriteRule . . . index.php?id=120

    Damit funktionieren nämlich auch die Referenzen auf css-Dateien usw.

    Total Ratlos und
    mit freundlichen Grüßen
    Roland