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.com
aber 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/b
wenn 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.
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…