Unterschiedliche Domain für Abschnitt der Website

Lesezeit: 7 Minuten

Benutzeravatar von Olemak
Olemak

Es gibt zwei Websites, nennen wir sie a.com und b.com; Sie waren bisher völlig getrennt. Es gibt jedoch “Synergien”, also möchte der Kunde b.com zu einem Teil von a.com machen (gleiche Medienbibliothek, Benutzer, Host, Datenbank usw.) … aber mit eigener Domain und eigenem Design. Eine Site innerhalb der Site mit eigener Domain.

SO, im Grunde: Wenn ein Benutzer zu einem bestimmten Teil der Website geht – sagen wir a.com/b, sollte sich die URL zu b.com ändern.

Ich würde denken, dass ich das mit virtuellen Apache-Hosts lösen kann; Ich habe diese Antwort für die Vorgehensweise mit Yii gefunden: Weisen Sie nur zwei Controllern eine andere Domäne zu

Aber ich benutze WordPress (bereits zur Hauptseite gemacht), also sollte ich mit Vanilla PHP und Apache Tweaking gehen. Alle Tipps und Hinweise sind willkommen.

bitte beachten Sie: Hier geht es nicht um Multisite, da dies die Vorteile einer gemeinsamen Mediengalerie und Benutzer usw. zunichte machen würde.

Wenn Sie eine einzelne WordPress-Installation verwenden möchten, möchten Sie entweder WordPress Multisite (was Sie anscheinend nicht tun möchten) mit einem Domain-Mapping-Plugin ausführen oder WordPress dann dazu bringen, jeden angeforderten Hostnamen (Domain) für den Betrieb und die Bereitstellung zu akzeptieren Inhalt bedingt auf jeder Domain.

(Im Folgenden wird davon ausgegangen, dass Sie beide steuern example.com und secondary.com und sie verweisen beide auf denselben Server, auf dem sich die WordPress-Installation befindet. Auch die folgenden Beispiele wurden direkt aus meinem Kopf gezogen, ohne dass echte Tests oder Validierungen damit verbunden waren, es kann so funktionieren oder nicht.)

WP dazu bringen, mehrere Hostnamen für Anfragen zu akzeptieren

Normalerweise ist WordPress an einen einzelnen Hostnamen/eine einzelne Domain gebunden, wo es Seiten und Inhalte bereitstellen kann. Die Domain wird in der gespeichert wp_options siteurl und home Reihen als http://www.example.com zum Beispiel.

Sie können dies überschreiben wp-config.php durch die Verwendung der WP_SITEURL und WP_HOME PHP-Konstanten. Zuerst müssen Sie sicherstellen, dass die Hauptdomain (z. B. maindomain.com) richtig auf die eingestellt ist wp_options Tabellenzeilen siteurl und home. Dann müssen Sie die anpassen wp-config.php Datei, damit WP jede Domain als solche akzeptiert:

define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);

(Achten Sie darauf, bei Bedarf zwischen HTTP und HTTPS umzustellen.

Jetzt sollte Ihre WP-Installation problemlos geöffnet werden, wenn eine Domain auf den Server verweist. Sie können so viele Domains haben, wie Sie möchten, und alle laden WP, wenn darauf zugegriffen wird.

Umleitung einer Seite auf eine andere Domain

Sie können entweder .htaccess oder WP-Code verwenden, um Weiterleitungen durchzuführen. Wenn die Weiterleitung anwendungs-/standortspezifisch ist und überall funktionieren sollte, versuchen Sie, WP-Code zu verwenden, da dies mit größerer Wahrscheinlichkeit in Quellcode-Repositorys und dergleichen nachfolgt.

add_action('template_redirect', function () {
    $isMainDomain = strpos($_SERVER['REQUEST_URI'], 'example.com') !== false;

    // We are on primary domain and on domain.com/b
    if ($isMainDomain && is_page('b')) {
        wp_redirect('http://secondary.com');
        exit;
    }

    // You need to validate child pages too and redirect where needed.
});

Füge das zu einem Plugin oder Theme hinzu functions.php. Jetzt, wenn jemand auf die Seite zugreift b auf der Hauptdomäne werden sie umgeleitet secondarydomain.com.

Um dies mit einem .htaccess zu erreichen, könnten Sie Folgendes versuchen

RewriteEngine on
RewriteBase /

// Redirect page `b` and all child pages to other domain.
RewriteCond %{HTTP_HOST} example.com$
RewriteRule ^b/(.*)$ http://www.secondary.com/$1 [L,QSA,R=301]

Entfernen des Seiten-Slugs von einer Seite in WP

Jetzt sitzt bei dir ein User http://www.secondary.comaber der Benutzer sieht die Startseite Ihrer WP-Installation anstelle des Inhalts der Seite b.

Mit .htaccess-Umschreibungen können Sie diese Domänenanfragen bei Bedarf an ein bestimmtes „Unterverzeichnis“ weiterleiten.

RewriteEngine on
RewriteBase /

# Something like the following should hide the `b` page/dir from requests.
RewriteCond %{HTTP_HOST} secondary.com$
RewriteRule ^(.*)$ http://www.secondary.com/b/$1 [L,QSA]

Diese Regel prüft zunächst, ob die Anfrage gegen die war secondary.com Domänenname. Wenn ja, schreibt der Server alle Anfragen an die WordPress-Seite um b und seine Unterseiten.

Wenn jetzt jemand öffnet http://www.secondary.com es sollte zugeordnet werden http://www.secondary.com/b und zeige stattdessen die Seite.

(Hinweis: Ich habe die obige Regel nicht getestet, daher kann es sein, dass sie so funktioniert oder nicht.

Permalinks reparieren

Jetzt haben Sie ein Problem mit Permalinks bezüglich der Seite b. Das Abrufen des Permalinks kehrt zurück http://www.example.com/bwenn es zurückkehren sollte http://www.secondary.com stattdessen.

Das Hinzufügen eines Filters für Permalinks sollte dieses Problem beheben:

add_filter('post_link', function ($link, $post) {
    if (is_admin()) {
        // Don't change in admin, or editing pages may break
        return $link;
    }

    // Check here that if the $post is either page `b`
    // or a child of that page
    // then return the proper link instead.
    return 'http://www.secondary.com/foo/bar';
});

Dies ist ein oberflächlicher Ansatz, der nicht berücksichtigt, wie sich Medien oder Benutzer verhalten. Sie müssen überprüfen, ob beide Domänen Cross-Origin-Anfragen zulassen und dass Benutzersitzungscookies bei Bedarf für Cross-Origin-Sitzungen ordnungsgemäß gespeichert werden.

Was ich auch vorschlagen würde, ist zu recherchieren, wie man sich in den Medien-Upload-Prozess einklinkt, damit zwei WP-Installationen dasselbe Verzeichnis und dieselben Daten verwenden. Dasselbe Verzeichnis ist mit der erreichbar upload_dir filtern und die Anhänge werden ähnlich wie Beiträge gespeichert, sodass Sie Uploads auf zwei Websites duplizieren können wp_insert_post oder ähnliches nehme ich an.

Zusätzlich können Sie mit einigen zwei WP-Installationen mit einer einzelnen Benutzertabelle verwenden wp-config.php Trickserei.

  • der ungetestete Code RewriteRule ^(.*)$ http://www.secondary.com/b/$1 [L,QSA] tatsächlich leitet mich aus irgendeinem Grund “zu oft” um secondary.com/b/b/b/b/b/b

    – Fanky

    21. Oktober 2019 um 8:44 Uhr

  • Das oben erwähnte Problem wurde behoben, aber secondary.com zeigt immer noch die Startseite an. Sehen Sie sich das Problem hier im Detail an: wordpress.stackexchange.com/questions/350920/…

    – Fanky

    21. Oktober 2019 um 9:59 Uhr

Benutzeravatar von Shomz
Schomz

SO, im Grunde: Wenn ein Benutzer zu einem bestimmten Teil der Website geht – sagen wir a.com/b, sollte sich die URL zu b.com ändern.

Klingt so, als müssten Sie nur eine Datei/einen Controller/einen Beitrag erstellen, der sich unter befindet a.com/b die den Browser umleiten wird b.com.

Der einfachste Weg ist, ein Verzeichnis mit dem Namen zu erstellen b im Stammverzeichnis und fügen Sie die Apache-Standarddatei dort ein (index.htm, index.php usw.), und diese Datei hätte einen Umleitungsheader.

Der ideale Weg, dies zu tun, besteht darin, eine 301-Weiterleitung zu verwenden .htaccess. Etwas wie

Redirect 301 /b http://b.com

oder mit Platzhalter:

RedirectMatch 301 /b(.*) http://b.com/$1

(es gibt tonnenweise htaccess-Ressourcen online)

Das sind die beiden Extreme, und es gibt viele andere Optionen dazwischen, Sie sollten eine auswählen, die für Sie am besten funktioniert, basierend darauf, wie viele Umleitungen es gibt, ob es irgendwelche Muster gibt, ob Sie in der Lage sein möchten, sie dynamisch zu generieren usw .


Das Problem, das Sie hier haben könnten (Sie haben das Problem nie vollständig beschrieben, also sage ich nur), ist, falls Sie zu a.com zurückkehren möchten und die ähnliche Umleitung auf b.com nicht einrichten können. In diesem Fall schlage ich vor, dass Sie einfach auf a.com/b sagen, während b.com in einem Iframe gerendert wird.

Wenn Sie nicht mit wp-Filtern oder Ihren htaccess-Regeln herumspielen wollen

Sie können einfach eine erstellen index.html in einem Verzeichnis namens /b/ oder erstelle eine Seite mit einem Slug mit dem Wert ‘b’ a.com/b mit diesem Code in einfachem HTML

<script>top.location='http://b.com'</script>

Fügen Sie einfach einen ©-Hinweis am Ende von b.com hinzu, der es zu einem Teil von a.com macht (oder fügen Sie einfach “Diese Website ist Teil von a.com” oder so ähnlich hinzu). Wenn Sie a.com mit b.com verknüpfen möchten, fügen Sie einen Link wie hinzu
b.com
. Falls Sie einen Domainnamen innerhalb von a.com möchten, dann führen Sie einfach eine Umleitung von a.com/b zu b.com durch…

1391290cookie-checkUnterschiedliche Domain für Abschnitt der Website

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy