madesign: auf externe Datenbank zugreifen

Hallo,
ich habe zwei Websites, http://www.stayinbuenosaires.com und http://www.stayinbuenosaires.com.ar eine englische und eine spanische Version die beide auf die selbe Datenbank auf dem .com Server zugreifen. Die www.stayinbuenosaires.com.ar wird mit htaccess auf die .com in ein Unterverzeichnis umgeleitet.
Nun kann ich leider mit der Umleitung keine Sitemap für die spanische Version anlegen und möchte nur die index, Site auf den spanischen Server hosten da Google einige Probleme macht mit dem Indexieren der Seite.
Siehe dazu hier: http://groups.google.com/group/Google_Webmaster_Help-Indexing-de/browse_thread/thread/0b3f451a26d6c7f5#d171065dddeb4ab4

Nun mein Problem:
per include('db.php'); greife ich auf die Datenbank zu. Wie kann ich auf die Datenbank zugreifen wenn die Index site auf dem anderen Server liegt?
Also von .com.ar auf die Datenbank die auf dem .com server gehostet wird?

Saludos y feliz año nuevo, Michael

  1. Hallo Michael,

    Nun mein Problem:

    und hier ein Loesungsvorschlag:
    Du laesst alles schoen auf der com-Domain laufen.
    Ruft nun jemand die index.php der spanischen Domain auf, holt diese
    sich via include($real_url); oder auch file_get_contents($real_url);
    die geparste html-Ausgabe von der com-Domain und zeigt sie an. Man
    muss nur mal sehen, was die Restriktionen des Providers zulassen.

    Gruss Norbert

    1. Hallo Norbert,

      danke für die schnelle Antwort und den interessanten Lösungsvorschlag.
      Die index site muss aber schon auf dem .com.ar Host liegen.

      und statt include('db.php'); setze ich include($real_url="http://www.stayinbuenosaires.com/es/db.php);

      Habe ich dich richtig verstanden?

      Saludos, Michael

      1. Hallo Michael,

        Die index site muss aber schon auf dem .com.ar Host liegen.

        sicher ...

        und statt include('db.php'); setze ich
        include('http://www.stayinbuenosaires.com/es/db.php');

        hmm,
        so wuerde ich es prinzipiell angehen.

        Gruss Norbert

        1. Hallo Norbert,

          so die index Seite liegt jetzt auf dem com.ar Host aber leider bekomme ich folgende Fehlermeldung wenn ich es so mache wie oben beschrieben.

          Warning: mysql_query() [function.mysql-query]: Access denied for user 'apache'@'localhost' (using password: NO) in /home/stay/domains/stayinbuenosaires.com.ar/public_html/index.php on line 9

          Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/stay/domains/stayinbuenosaires.com.ar/public_html/index.php on line 9

          Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/stay/domains/stayinbuenosaires.com.ar/public_html/index.php on line 13

          Mein Code sieht so aus:

          <?
           include('http://www.stayinbuenosaires.com/es/db.php');

          if(isset($_GET['action']) && $_GET['action'] == "search")
           {
            if(is_numeric($_GET['id']))
            {
             $sql = "SELECT * FROM apartments WHERE id apartments = ".$_GET['id']."";
             $result = mysql_query($sql);

          if(mysql_num_rows($result) > 0)
             {
              header("Location: apartments.php?id=".$_GET['id']."");
             }else{
              $error = "No hay registro con este ID.";
             }
            }else{
             $error = "No hay registro con este ID.";
            }
           }
          ?>

          Bezieht sich auf "Apartamento ID Go" Funktion um direkt zu einem Apartment zu springen. Wenn die ID nicht existiert wird eine Fehlermeldung ausgegeben.
          Was muss ich noch ändern?

          Feliz año nuevo, Michael
          Glückliches neues Jahr

          1. Hallo Michael,

            irgendwie haben wir hier aneinander vorbei geredet!
            Natuerlich klappt das so nicht.
            Auf der ar-Domain darf gar nix passieren, nur includen!
            Der code der 'index.php' muss wie folgt aussehen:

            <?php  
            include('http://www.stayinbuenosaires.com/ar/index.php');  
            ?>
            

            D.h. im Ordner /ar/ auf der com-Domain liegt eine vollstaendige index.php
            Wenn man 'http://www.stayinbuenosaires.com/ar/index.php' im Browser aufruft,
            muss das zu sehen sein, was auch auf 'http://www.stayinbuenosaires.com.ar'
            zu sehen sein soll.
            Merke: Wenn man ueber http://... includet, erhaelt man reines HTML.

            Gruss und Happy Dingens
            Norbert

            1. Hallo Norbert,

              ich glaub ich stell mich zu doof an.
              Du meintest denk ich:

              <?php
              include('http://www.stayinbuenosaires.com/es/index.php');
              ?>

              auf dem www.stayinbuenosaires.com.ar Host in einer index.php Seite.

              Die Seite wird auch aufgerufen aber leider funzt dann kein Link mehr und auch die Suchfunktion usw, funktionieren dann nicht mehr.

              Oder ich hab etwas falsch verstanden.
              Sorry wenn ich glaube ich deine Geduld etwas strapaziere.

              Michael

              1. Hello,

                <?php
                  readfile('http://www.stayinbuenosaires.com/es/index.php');
                ?>

                auf dem www.stayinbuenosaires.com.ar Host in einer index.php Seite.

                Die Seite wird auch aufgerufen aber leider funzt dann kein Link mehr und auch die Suchfunktion usw, funktionieren dann nicht mehr.

                Oder ich hab etwas falsch verstanden.

                Nein, Du hast das jetzt schon "richtig" nachvollzogen, aber es war nicht sehr gut vorausgedacht. Entweder, Du musst für diese Vorgehensweise alle Referenzen der einzubindenen Seite als absolute URL angeben, also auch mit Scheme und Host, oder Du musst die kompletten Links auf dem einbindenden Server  umschreiben lassen. Das wäre nach außen hin natürlich logischer.

                Dann kannst Du Dir die Seiten aber auch gleich auf dem anderen Server im (verschlüsselten) Format erstellen mit der richtigen Domain und musst sie dann auf dem Zielsystem nur wieder "auspacken".

                Harzliche Grüße aus
                Sankt Andreasberg
                und Frohes Neues Jahr

                Tom

                --
                Nur selber lernen macht schlau

                1. Ok, die Links zu ändern hab ich keine Problem mit.
                  Das einzige was ich nicht weiss wie ich es hinbekomme ist die "Apartamento ID Go" funktion.
                  Das Skript dazu sieht so aus:
                  <?
                   include('db.php');

                  if(isset($_GET['action']) && $_GET['action'] == "search")
                   {
                    if(is_numeric($_GET['id']))
                    {
                     $sql = "SELECT * FROM apartments WHERE id apartments = ".$_GET['id']."";
                     $result = mysql_query($sql);

                  if(mysql_num_rows($result) > 0)
                     {
                      header("Location: apartments.php?id=".$_GET['id']."");
                     }else{
                      $error = "No hay registro con este ID.";
                     }
                    }else{
                     $error = "No hay registro con este ID.";
                    }
                   }
                  ?>
                  Es macht nicht anderes als dass man direkt zum jeweiligen Apartment springt ohne über die Zwischenseiten zu gehen wenn man die ID kennt.

                  Zur Erinnerung mein eigentliches Problem war dieses hier: http://groups.google.com/group/Google_Webmaster_Help-Indexing-de/browse_thread/thread/0b3f451a26d6c7f5#d171065dddeb4ab4

                  Es genügt also für mich nur die Indexseite auf .com.ar zu haben um für Google dort eine Sitemap anlegen zu können.
                  Wenn die Go to Apartamento ID Funktion funktioniert bin ich damit ganz glücklich.

                  Feliz año nuevo (Glückliches neues Jahr) aus Argentinien bei 31°, Michael

            2. Hello,

              Merke: Wenn man ueber http://... includet, erhaelt man reines HTML.

              Und eine scheunentorgroße Sicherheitslücke, zwar nicht durch Jedermann nutzbar, aber doch noch noch durch genügend Leute.

              Es besteht überhaupt kein Anlass dazu, "fertiges" HTML durch include() inn eine Seite einzubidnen. Da gibt es genügend andere Möglichkeiten ohne Kontrollverlust.

              Eine einfache Möglichkeit wäre z.B. auch readfile(). Da kann wenigstens keiner des eingebundnen Codes aktiv werden.

              Harzliche Grüße aus
              Sankt Andreasberg
              und Guten Rutsch

              Tom

              --
              Nur selber lernen macht schlau

              1. Hallo Tom,

                Merke: Wenn man ueber http://... includet, erhaelt man reines HTML.
                Und eine scheunentorgroße Sicherheitslücke, zwar nicht durch Jedermann
                nutzbar, aber doch noch noch durch genügend Leute.

                hmm,
                fuehlst Du Dich in der Lage diese Behauptung durch ein Beispiel zu belegen,
                oder hat man Dir das auch nur eingeredet ... ;-)

                Gruss und Happy Dingsbums
                Norbert

                1. echo $begrüßung;

                  Merke: Wenn man ueber http://... includet, erhaelt man reines HTML.

                  So der Wunsch, der eventuelle Sicherheitslücken außer Acht lässt.

                  Und eine scheunentorgroße Sicherheitslücke, zwar nicht durch Jedermann
                  nutzbar, aber doch noch noch durch genügend Leute.
                  fuehlst Du Dich in der Lage diese Behauptung durch ein Beispiel zu belegen,

                  Es muss sich nur eine XSS-Lücke auf der zu inkludierenden Seite befinden, durch die man PHP-Code in die ausgelieferte Seite einbringen kann.

                  Beispiel eine Suchfunktion, die mit "Sie haben nach $eingabe gesucht. Die Suche ergab ...". Wenn der Inhalt von $eingabe nicht HTML-gerecht aufbereitet wurde, gelangen Sonderzeichen wie < direkt in den Ausgabe und kennzeichnen das nachfolgende als Code und nicht als Nutzdaten.

                  readfile() verhindert nicht das Durchreichen der XSS-Injektion (beispielsweise, wenn damit HTML- und/oder Javascript-Code eingebunden wurde), wohl aber das Ausführen von PHP-Code auf dem inkludierenden Server.

                  echo "$verabschiedung $name";

                  1. readfile() verhindert nicht das Durchreichen der XSS-Injektion (beispielsweise,
                    wenn damit HTML- und/oder Javascript-Code eingebunden wurde),
                    wohl aber das Ausführen von PHP-Code auf dem inkludierenden Server.

                    hmm,
                    wusste doch, dass mein NIH-Syndrom zu etwas gut sein muss ... ;-)

                    Gruss Norbert

                    1. Also jetzt readfile oder include benutzen?
                      Ich muss nur noch die "Go to Apartamento ID" Funktion zum laufen bringen.

                      Code:
                      <?
                       include('db.php');

                      if(isset($_GET['action']) && $_GET['action'] == "search")
                       {
                        if(is_numeric($_GET['id']))
                        {
                         $sql = "SELECT * FROM apartments WHERE id apartments = ".$_GET['id']."";
                         $result = mysql_query($sql);

                      if(mysql_num_rows($result) > 0)
                         {
                          header("Location: apartments.php?id=".$_GET['id']."");
                         }else{
                          $error = "No hay registro con este ID.";
                         }
                        }else{
                         $error = "No hay registro con este ID.";
                        }
                       }
                      ?>

                      Michael

                      1. echo $begrüßung;

                        Also jetzt readfile oder include benutzen?

                        include wird verwendet, wenn Dateien eingebunden werden sollen und deren enthaltener PHP-Code ausgeführt werden soll. readfile() nimmt man, wenn der PHP-Code nicht ausgeführt werden soll, beispielsweise dann, wenn man gar keinen erwartet.

                        $sql = "SELECT * FROM apartments WHERE id apartments = ".$_GET['id']."";

                        Benutzereingaben unbehandelt in SQL-Statements zu übernehmen ist fahrlässig. Informiere dich zum Thema SQL-Injection und über die Funktion mysql_real_escape_string() sowie über das Feature Magic Quotes.

                        Was bewirkt das Anhängen eines Leerstrings? Nichts. Kann ersatzlos gestrichen werden.

                        $result = mysql_query($sql);
                           if(mysql_num_rows($result) > 0)

                        Wenn die Abfrage fehlschlägt enthält $result keinen für mysql_num_rows() gültigen Wert. Dass einige mysql_*()-Funktionen im Fehlerfall ein false zurückliefern solltest du immer beachten und entsprechend behandeln.

                        Wenn du nur die Anzahl der Datensätze zählen willst, ist es unsinnig, sie komplett abzufragen. Damit mysql_num_rows() ein Ergebnis liefern kann, muss PHP alle Datensätze vom MySQL-Server abholen. Bei jedem mysql_query() wird dies im Hintergrund gemacht, und die Datensätze zwischengespeichert. (Die Fetch-Funktionen greifen auf diesen Zwischenspeicher zu, nicht direkt auf den MySQL-Server.) Um also nicht jede Menge unnötigen Datenverkehr zu haben, empfiehlt es sich, die COUNT()-Funktion MySQLs zu verwenden. Damit hat man eine Ergebnismenge von nur einem Wert in einer Zeile.

                        header("Location: apartments.php?id=".$_GET['id']."");

                        Abgesehen davon, dass die meisten Browser die Umleitung auch in der Form verarbeiten, verlangt die Spezifikation für den Location-Header eine vollständige URL.

                        echo "$verabschiedung $name";

                        1. echo $begrüßung;

                          $sql = "SELECT * FROM apartments WHERE id apartments = ".$_GET['id']."";
                          Benutzereingaben unbehandelt in SQL-Statements zu übernehmen ist fahrlässig.

                          Diese Reaktion ist bei mir schon zum Reflex geworden, wenn ich solch ein Konstrukt sehe. Dabei habe ich in dem Fall unterschlagen, dass du die Query ja nur ausführst, wenn is_numeric($_GET['id']) zutrifft. Das ist zwar schon eine ausreichende Prüfung, trotzdem schadet es unter MySQL nicht, auch reine Zahlenwerte als Strings zu notieren und sie mit mysql_real_escape_string() zu behandeln. Falls irgendjemand mal in Zukunft auf die Idee kommt, alphanumerische Werte für die ID zu verwenden, ist diese Stelle dann bereits gesichert.

                          Alternativ kann man auch die Prüfung mit is_numeric() weglassen und mit intval() zwangsweise einen Integerwert aus $_GET['id'] machen. Ungültige Werte werden dann zu 0. Wenn es die ID 0 nicht gibt, hast du das gleiche Abfrageergebnis wie bei einer nicht vorhandenen ID, und damit nur noch einen Fehlerbehandlungszweig, statt derzeit derer zwei.

                          echo "$verabschiedung $name";

                          1. Danke allen für die Vorschläge hier aber ich denke die Diskussion findet jetzt unter PHP cracks ohne mich statt.
                            Mit keiner der hier angebotenen Lösungen funktioniert die spanische index.php Seite wenn sie auf dem .com.ar Server liegt, bzw. mit include oder readfile. Und darum ging es eigentlich letztendlich.
                            Denn so wie die Seiten jetzt auf den Hosts liegen funktioniert ja alles.
                            Ob mit oder ohne Leerstring usw.
                            Ich bin aber für weitere Vorschläge offen.

                            Ansonsten schönes neues Jahr, Michael

                        2. Hello,

                          Wenn du nur die Anzahl der Datensätze zählen willst, ist es unsinnig, sie komplett abzufragen. Damit mysql_num_rows() ein Ergebnis liefern kann, muss PHP alle Datensätze vom MySQL-Server abholen.

                          Bist Du da sicher?

                          Das habe ich neulich erst versucht, herauszufinden, wo das Resultset des buffered Query gespeichert wird. MMn wird es im Verantwortungsbereich des MySQL-Server gespeichert, was aber trotzdem nicht davon befreit, dass die Daten aus der normalen Datenhaltung kopiert werden in einen eigenen Bereich übertragen werden. Ich hatte das untersucht, weil ich wissen wollte, ob beim einem unbuffered Query auch ein mysql_free_result notwendig ist. Das ist so. Unter der Resultkennung wird entweder direkt die Ausgabeschnittstelle freigegeben (unbubbered Query) oder der Ausgabespeciherbereich, je nachdem, ob mysql_strore_result zwischendurch aufgerifen wurde. bei den obigen Funktionen handelt es ich um die mit den PHP-Funktionen gelichnamigen der C-API.

                          http://dev.mysql.com/doc/refman/5.0/en/null-mysql-store-result.html
                          und von dort werden die Daten dann "abgeholt"
                          http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html

                          Erst mit einer (PHP-) mysql_fetch_*-Funktion werden die Daten dann in den Speicherbereich, der zum Script gehört, abgeholt. Das kann durchaus wichtig sein bei großen Resultsets. Wenn man nämlich nur 8MB Scriptspeicher hat und muss so ein großes Resultset (oder mehrere) verarbeiten, kann man es auch "stückchenweise" abholen und den Puffer in PHP immer wiederverwenden. natürlich nur, wenn es programmtechnisch sinnvoll ist...

                          Harzliche Grüße aus
                          Sankt Andreasberg
                          und Frohes Neues Jahr

                          Tom

                          --
                          Nur selber lernen macht schlau

                          1. echo $begrüßung;

                            Wenn du nur die Anzahl der Datensätze zählen willst, ist es unsinnig, sie komplett abzufragen. Damit mysql_num_rows() ein Ergebnis liefern kann, muss PHP alle Datensätze vom MySQL-Server abholen.
                            Bist Du da sicher?

                            Das PHP-Handbuch zur Funktion mysql_unbuffered_query() sagt so. Weitergeschaut in der MySQL-API liefert mysql_num_rows() einen Verweis auf mysql_store_result(). Dort ist zu entnehmen, dass nicht direkt PHP aber die in PHP eingebundene MySQL-Client-API die Pufferung vornimmt.

                            Das habe ich neulich erst versucht, herauszufinden, wo das Resultset des buffered Query gespeichert wird. MMn wird es im Verantwortungsbereich des MySQL-Server gespeichert,

                            Nein, beim Client von der MySQL-Client-API.

                            Erst mit einer (PHP-) mysql_fetch_*-Funktion werden die Daten dann in den Speicherbereich, der zum Script gehört, abgeholt. Das kann durchaus wichtig sein bei großen Resultsets. Wenn man nämlich nur 8MB Scriptspeicher hat und muss so ein großes Resultset (oder mehrere) verarbeiten, kann man es auch "stückchenweise" abholen und den Puffer in PHP immer wiederverwenden. natürlich nur, wenn es programmtechnisch sinnvoll ist...

                            Wenn du Leute anforderst, sie draußen im Gang warten lässt, quillt natürlich dein Büro nicht über. Aber der Gang muss erstmal gefüllt werden und verstopft dann eben diesen. Außerdem muss dein Praktikant, den du zum Zählen rausschickst erst warten, bis alle da sind, und sie dann noch durchzählen. Wenn du sie nicht explizit eliminieren lässt, warten sie auch noch noch auf dem Gang bis zu deinem Feierabend, und werden nun vom Reinigungspersonal beseitigt.

                            echo "$verabschiedung $name";

                            1. Hello,

                              Nein, beim Client von der MySQL-Client-API.

                              Ja, hab's gefunden. Es wird im Zwischengesicht geparkt.

                              mysql_store_result() reads the entire result of a query to the client, allocates a MYSQL_RES structure, and places the result into this structure.

                              Das heißt dann also, dass die Daten mindestens zweimal umkopiert werden, bis sie im Script zur Verfügung stehen. Also ganz schöner Aufwand, um Wolle S. seine Informationen zu liefern *g*

                              Tabelle -> Abfragepuffer -> Interface -> Script -> Ausganbepuffer -> Browser

                              Harzliche Grüße aus
                              Sankt Andreasberg
                              und Frohes Neues Jahr

                              Tom

                              --
                              Nur selber lernen macht schlau

                        3. Hallo dedlfix,

                          Benutzereingaben unbehandelt in SQL-Statements zu übernehmen ist fahrlässig.

                          Die Eingabe ist zudem auf drei Zeichen beschränkt

                          Wenn du nur die Anzahl der Datensätze zählen willst, ist es unsinnig, sie komplett abzufragen. Damit mysql_num_rows() ein Ergebnis liefern kann, muss PHP alle Datensätze vom MySQL-Server abholen. Bei jedem mysql_query() wird dies im Hintergrund gemacht, und die Datensätze zwischengespeichert. (Die Fetch-Funktionen greifen auf diesen Zwischenspeicher zu, nicht direkt auf den MySQL-Server.) Um also nicht jede Menge unnötigen Datenverkehr zu haben, empfiehlt es sich, die COUNT()-Funktion MySQLs zu verwenden. Damit hat man eine Ergebnismenge von nur einem Wert in einer Zeile.

                          Hmm.. eigentlich will ich nicht die Anzahl zählen sondern prüfen ob eine bestimmte ID existiert, wenn nicht Fehlermeldung, sonst zur Seite mit ID gehen.

                          Funktioniert auch alles solange Seite und Datenbank sich auf dem selben Host befinden.

                          Das alles lässt immer noch die eigentliche Frage offen wie ich auf die Datenbank zugreife wenn die Indexseite auf dem .com.ar Host liegt.

                          Michael

                          1. Hello,

                            Benutzereingaben unbehandelt in SQL-Statements zu übernehmen ist fahrlässig.
                            Die Eingabe ist zudem auf drei Zeichen beschränkt

                            Wo? Am Client oder am Server?

                            Harzliche Grüße aus
                            Sankt Andreasberg
                            und Frohes Neues Jahr

                            Tom

                            --
                            Nur selber lernen macht schlau

                            1. Hallo Tom,

                              am Client aber das war ja nicht mein Problem. Auch wenn ich die Eingabe auf Zahlen reduziere funktioniert ja die Funktion nicht wenn die Indexseite auf einem anderen Server liegt als die Datenbank.
                              Die Frage ist ja, wie bekomme ich es hin dass bei Aufruf der Funktion die Datenbank durchsucht wird und dann zur entsprechender Seite gesprungen wird wenn die Indexseite mit der Funktion auf einem anderen Host liegen als die Datenbank und und alle übrigen Seiten.

                              Ist alles auf dem selbem Host funktioniert alles einwandfrei.

                              Saludos, Michael

          2. Hello,

            Warning: mysql_query() [function.mysql-query]: Access denied for user 'apache'@'localhost' (using password: NO) in /home/stay/domains/stayinbuenosaires.com.ar/public_html/index.php on line 9

            Das wäre auch hässlich, wenn die Datenbank auf dem Server ohne Passwort dastehen würde.
            Außerdem gibt es wirklich selten Gründe, den Script-Usern auch die vollen Rechte auf die DB einzurichten. Dafür solltest Du Dir spezielle Uyser einrichten, die wirklich nur das nötigste können und dürfen in der DB.

            Harzliche Grüße aus
            Sankt Andreasberg
            und Frohes Neues Jahr

            Tom

            --
            Nur selber lernen macht schlau

  2. echo $begrüßung;

    ich habe zwei Websites, http://www.stayinbuenosaires.com und http://www.stayinbuenosaires.com.ar eine englische und eine spanische Version die beide auf die selbe Datenbank auf dem .com Server zugreifen. Die www.stayinbuenosaires.com.ar wird mit htaccess auf die .com in ein Unterverzeichnis umgeleitet.

    Wie genau sieht das Konstrukt aus? Sind es zwei physikalisch getrennte Server? Wie erfolgt die Umleitung?

    Nun kann ich leider mit der Umleitung keine Sitemap für die spanische Version anlegen und möchte nur die index, Site auf den spanischen Server hosten da Google einige Probleme macht mit dem Indexieren der Seite.

    Kann die Umleitung, wenn sie denn schon in der .htaccess stattfindet, nicht die Sitemap ausnehmen?

    Das ganze Konstrukt hätte ich vermutlich so aufgebaut, dass die Seiten auf einem Server liegen, und sie sich um beide Sprachen kümmern. Beide Domains zeigen auf die gleichen Seiten. Das PHP kann beispielsweise anhand von $_SERVER['SERVER_NAME'] unterscheiden, welche Sprachvariante/Domain gewählt wurde. Dazu muss aber der Server beide Domains behandeln können. Dass die Domains aus welchen Gründen auch immer vielleicht bei unterschiedlichen Providern angemeldet sind, ist nicht ganz tragisch. Der Fremdhoster muss es nur zulassen, dass man den DNS-Eintrag auf IP-Adresse des Servers mit den Seiten zeigen lassen kann. Letzterer muss so konfiguriert sein, dass er sich für die Domain zuständig fühlt, aber ohne DNS-Handling. Das ist technisch alles kein Problem, nur die Provider müssen da mitspielen.

    echo "$verabschiedung $name";

    1. Sorry hatte dein Posting übersehen.
      Umgeleitet wird so:

      Options +FollowSymLinks
      RewriteEngine on
      RewriteRule (.*) http://www.stayinbuenosaires.com/es/$1 [R=301,L]

      Es sind zwei unabhängige Server die auf einem .com holländischen und .com.ar argentinischen Provider gehostet werden.

      Bei beiden kann ich den entfernten Datenbankzugriff erlauben.
      Wie nehme ich die Sitemap in der Umleitung aus?
      Das wäre eine einfache und elegante Lösung wenn sie denn funktioniert.

      Beide Seiten liegen ja auf einem Server.

      Das PHP kann beispielsweise anhand von $_SERVER['SERVER_NAME'] unterscheiden, welche Sprachvariante/Domain gewählt wurde. Dazu muss aber der Server beide Domains behandeln können. Dass die Domains aus welchen Gründen auch immer vielleicht bei unterschiedlichen Providern angemeldet sind, ist nicht ganz tragisch. Der Fremdhoster muss es nur zulassen, dass man den DNS-Eintrag auf IP-Adresse des Servers mit den Seiten zeigen lassen kann. Letzterer muss so konfiguriert sein, dass er sich für die Domain zuständig fühlt, aber ohne DNS-Handling. Das ist technisch alles kein Problem, nur die Provider müssen da mitspielen.

      Das mit dem DNS Handling versteh ich allerdings nicht

      Saludos, Michael

      1. echo $begrüßung;

        Umgeleitet wird so:
        RewriteRule (.*) http://www.stayinbuenosaires.com/es/$1 [R=301,L]
        Wie nehme ich die Sitemap in der Umleitung aus?

        Man kann vor eine RewriteRule ein oder mehrere RewriteCond-Direktiven einfügen, und somit der RewriteRule Bedingungen unterschieben. Beispielsweise könntest du alles von der Umleitung ausnehmen, was real existierende Dateien und Verzeichnisse sind.

        Das wäre eine einfache und elegante Lösung wenn sie denn funktioniert.

        Ja, wenn. Wenn allerdings Domain A nach Domain B umleitet und sonst keine weiteren Seiten direkt ausliefert, dann kommt sich vielleicht Google veralbert vor, wenn es eine umfangreiche Sitemap für A findet, aber keinen direkten Content. Zumindest kann ich mir das gut vorstellen.

        Das PHP kann beispielsweise anhand von $_SERVER['SERVER_NAME'] unterscheiden, welche Sprachvariante/Domain gewählt wurde. Dazu muss aber der Server beide Domains behandeln können. Dass die Domains aus welchen Gründen auch immer vielleicht bei unterschiedlichen Providern angemeldet sind, ist nicht ganz tragisch. Der Fremdhoster muss es nur zulassen, dass man den DNS-Eintrag auf IP-Adresse des Servers mit den Seiten zeigen lassen kann. Letzterer muss so konfiguriert sein, dass er sich für die Domain zuständig fühlt, aber ohne DNS-Handling. Das ist technisch alles kein Problem, nur die Provider müssen da mitspielen.

        Das mit dem DNS Handling versteh ich allerdings nicht

        Du hast hier zwei Systeme, die miteinander spielen müssen. Zum einen ist das der DNS, der aus einem Domainnamen eine IP-Adresse macht, zum anderen der Apache, der die Webseiten einer bestimmten Domain ausliefern soll. Hinzu kommt noch, dass mehrere Domains auf die selbe IP-Adresse verweisen können, und es dann des Apaches Aufgabe ist, zwar nur auf einer IP zu lauschen, aber die Domains auseinanderzuhalten. Das beherrscht er aber mit dem Feature Namensbasierte virtuelle Hosts recht gut.

        Du hast also eine Domain, die auf eine bestimmte IP verweist. Da lauscht dann ein Webserver. Der Webserver beherbergt jedoch möglicherweise mehrere Angebote und muss deshalb nicht nur einfach reagieren sondern auch noch die angeforderte Domain auswerten, um die Dokumente des richtigen Angebots auszuliefern. Beim Alles-aus-einer-Hand-Provider konfiguriert der die Domains beim DNS und lässt sie auf die IP des Webservers verweisen, und konfiguriert diesen, dass er den Domainnamen kennt und passende Dokumente liefern kann.

        Doch das ganze Gebilde kann man auch aufteilen. Provider 1 konfiguriert konfiguriert den Domainnamen auf seinen DNS-Systemen, verweist aber auf die IP vom Webserver beim Provider 2. Dieser Webserver muss wissen, dass er für die Domain zuständig ist, auch wenn sie nicht beim Provider 2 registriert ist. Technisch ist das alles kein Problem. Die Technik unterscheidet nicht zwischen den Providern. Doch es ist eine administrative Aufgabe. 08/15-Billig-Massenhosterangebote unterstützen sicher solch eine Konfiguration nicht, aber schon ein/zwei Preisklassen darüber sollte das kein Problem mehr darstellen.

        Du müsstest also schauen, ob du beim Provider 1, bei dem die Domain registiert ist (und bezahlt wird), für diese eine IP-Adresse explizit einstellen kannst. (Wenn das geht, kann man das nicht nur für die Domain, sondern auch für Subdomains machen. Mit einer solchen kannst du ja erstmal testen, ob das prinzipiell funktioniert, ohne am lebenden Patienten rumzudoktorn.) Beim Provider 2 schaust du, ob der einen Domainnamen auf dem Webserver konfigurieren lässt, ohne dass er gleich noch die Domain beim zuständigen NIC registrieren will.

        echo "$verabschiedung $name";

        1. Danke für die Info dedlfix,

          nennt sich dass beim Hoster z.b. Domainpointer?
          Ich kann auf dem .com Host eine zweite Domain anlegen die ich www.stayinbuenosaires.com.ar nennen kann und von der einen Domainpointer auf die eigentliche www.stayinbuenosaires.com.ar konfiguerieren.

          Ist es das was Du meintest?

          Mein Host ist in der etwas besseren Preisklasse, Unlimitierter Traffic, 500 MB Space usw..
          Kein Strato oder AT&T.

          Saludos, Michael

          1. echo $begrüßung;

            nennt sich dass beim Hoster z.b. Domainpointer?

            Wenn es so etwas ist http://www.webhostlist.de/domains/967-ATvirtualNET/1739-Domainpointer.html dann ist es wahrscheinlich das, was ich meine. Da ist der Haken gesetzt bei DNS-Weiterleitung, aber nicht bei Header- und Frames-Weiterleitung.

            Da fällt mir auch noch Mailweiterleitung auf. Auch das ist wie bei der DNS-Weiterleitung rein technisch nur ein Eintrag im DNS. Für die Domain muss nicht nur die gewünschte IP-Adresse eingetragen sein, sondern auch der Server, der die Mail für diese Domain empfängt. Das können durchaus unterschiedliche Maschinen sein. Allerdings muss auch hier der empfangende Mailserver so konfiguriert sein, dass er Post für diese Domain annimmt.

            Ich kann auf dem .com Host eine zweite Domain anlegen die ich www.stayinbuenosaires.com.ar nennen kann und von der einen Domainpointer auf die eigentliche www.stayinbuenosaires.com.ar konfiguerieren.
            Ist es das was Du meintest?

            Wenn der .com dein Hauptserver ist, dann musst du dem bekanntgeben, dass er auch für die .com.ar-Webseiten zuständig ist. Der Domainpointer muss dann vom Registrar der .com.ar-Domain auf deinen .com-Server verweisen (und für den Mailempfang auf den Mailserver beim .com-Hoster).

            echo "$verabschiedung $name";

            1. Hallo dedlfix,

              genau das ist es.
              Was aber nicht geht ist www.stayinbuenosaires.com.ar auf www.stayinbuenosaires.com.ar zu pointen.
              Es dauert eh bis zu 72 Stunden bis es funktioniert.
              Ich werde es aber ausprobieren.
              Was ich noch nicht genau weiss ist wie ich den Unterordner com/es/ als Homeordner für die Domain einrichte. Da mit einer neuen Domain ja ein neues Verzeichnis entsteht.
              Nun schlimmstenfalls müsste ich die gesamte Seite umlagern.
              Danke für deine umfangreiche Hilfe dedlfix.

              Saludos, Michael

              1. echo $begrüßung;

                Was aber nicht geht ist www.stayinbuenosaires.com.ar auf www.stayinbuenosaires.com.ar zu pointen.

                Das verstehe ich nicht.

                Was ich noch nicht genau weiss ist wie ich den Unterordner com/es/ als Homeordner für die Domain einrichte. Da mit einer neuen Domain ja ein neues Verzeichnis entsteht.

                Nicht zwingend. Einem Apachen kann man einem namensbasierenden virtuellen Host mehrere Domains zuweisen. Man kann aber auch für jede Domain einen eigenen VHost anlegen und dem ein anderes Documentroot-Verzeichnis geben. Ob und wie dein Provider das in eine kundenbedienbare Oberfläche gepackt hat, weiß ich aber nicht.

                echo "$verabschiedung $name";

                1. Hallo dedlfix,

                  nein eine bedienbare Oberfläche gibt es in dem Fall nicht. Ich probier ob der Pointer überhaupt funktioniert und dann kann ich mich ja an den Provider wenden ob die das mit dem virtuellen Host machen würden.
                  Was mir auch noch nicht klar ist wie die Seite für den Besucher ercheint, als www.stayinbuenosaires.com.ar oder als die Adresse von der der Pointer ausgeht.
                  Aber das werde ich in kürze sehen.
                  Danke noch mal für die viele Hilfe.

                  Saludos, Michael

                  1. echo $begrüßung;

                    Was mir auch noch nicht klar ist wie die Seite für den Besucher ercheint, als www.stayinbuenosaires.com.ar oder als die Adresse von der der Pointer ausgeht.

                    Wenn alles richtig läuft, dann hat der Besucher genau diese Domain vor Augen. Hinter den Kulissen löst der Browser zunächst die Domain mittels DNS auf. Das macht der DNS beim Provider, der die Domain registriert hat. Dort wird auf die IP-Adresse vom Server-Hoster verwiesen. Der Browser schickt seine Anfrage nach der Domain .com.ar an die vom DNS ermittelte IP-Adresse. Der Webserver dort findet zu dem Domainnamen einen VHost und liefert die Dokumente gemäß dessen Konfiguration aus. Das ist ein Vorgang, wie er ganz normal im Web stattfindet, nur dass bei dir zwei Provider beteiligt sind und sonst meist nur einer.

                    echo "$verabschiedung $name";