Veröffentlichungsdatum: 07. Dezember 2016
Änderungsdatum: 25. Oktober 2018
projekt aufruf domain projektdomains htaccess mod_rewrite rewrite abfrage
Dieser Artikel beschreibt, wie Sie den Aufruf eines Projektes nur über die dafür vorgesehene Projekt-Domain ermöglichen.
Beim Einsatz mehrerer Domains zur gleichen Internet-Präsenz stellt sich die Frage, wie z.B. Suchmaschinen auf diesen sogenannten doppelten Inhalt (Stichwort: "Duplicate Content") reagieren. Aber nicht nur aus Sicht der Suchmaschinenoptimierung (Stichwort: "SEO") kann es ratsam sein, ein Projekt nur über eine konkrete Domain aufrufbar zu machen. Bei Installationen, die mehrere Projekte bzw. Sprachen lizenziert haben (z.B. eine Firmengruppe mit Niederlassungen), ist es ggf. auch erwünscht bzw. erforderlich, daß die Projekte nur über die jeweils gewünschte Domain erreichbar sind.
Änderung Februar 2016:
Ab Weblication® CMS Version 10.x bietet eine aktuelle BASE bereits im Standard vordefinierte Abfragen und Funktionen, auf die Sie zurückgreifen können! Diese Standardumsetzung setzt auf Lösung 2 dieses Artikels auf (siehe unten).
Hierzu nachfolgend ein Beispiel, wie über Umschreibungsregeln (Rewrite-Rules) der Aufruf eines Projektes auf eine konkrete Domain weitergeleitet wird. Durch den Einsatz einer .htaccess Datei und dem Apache-Modul "mod_rewrite" können Sie - wenn der Provider dies für den Apache-Webserver erlaubt - eine permanente Weiterleitung für ein Projekt schalten. Alternativ - und besser in Hinblick auf die Pflegemöglichkeit - ist die Umsetzung rein über PHP, was in Lösung 2 aufgezeigt wird.
Es besteht eine Weblication® Installation mit zwei lizenzierten Projekten, die jeweils über eine zusätzliche Sprache verfügen:
Auf diese Projekte / Präsenzen sind folgende Domains aufgeschaltet (gleiche DOCUMENT_ROOT):
Die einzelnen Projekt bzw. Sprachprojekte (Sprachen) sollen für Seitenbesucher nur über die zugehörige Domain erreichbar sein, also z.B. "projekt-domain.de/projekt" (nicht "projekt-domain.de/projekt2") und "projekt-domain.com/projekt-en", "projekt2-domain.de/projekt2", etc.
Wenn die Lizenz alle Domains über die Lizenzdatei abdeckt, kann dies über Lösung 1 umgesetzt werden. Ist nur eine Domain lizenziert, sollte Lösung 2 verwendet werden.
Das folgende Beispiel nutzt hierfür über eine .htaccess Datei im Projektverzeichnis eine Rewrite-Rule. Sofern das Projekt nicht über die Domain "projekt-domain.de" aufgerufen wird, wird die Anfrage auf diese Domain permanent umgeleitet.
Beim Aufruf von"projekt-domain.com/projekt-de/index.php" wird somit weitergeleitet nach "projekt-domain.de/projekt-de/index.php".
RewriteEngine on RewriteCond %{HTTP_HOST} !^.*projekt-domain\.de$ [NC] #RewriteCond %{HTTP_USER_AGENT} !^.*wSearchBot.* [NC] # Suche läuft als UserAgent: Weblication-Grid/5.0 (wSearchBot) RewriteRule ^(.*)$ http://www.projekt-domain.de/projekt-de/$1 [R=301,L]
Eine zweite Variante wäre, daß per .htaccess auf die Document Root der Ursprungsdomain leitet, wenn das Unterverzeichnis eines anderen Projektes (nicht für die Domain bestimmt) aufgerufen wird. Dort könnte z.B. eine /index.php eine entsprechende Weiterleitung vornehmen o.ä.
RewriteEngine on RewriteCond %{HTTP_HOST} !^.*projekt-domain\.de$ [NC] RewriteRule ^(.*)$http://%{HTTP_HOST}/ [R=301,L]
Um Projektaufrufe über nicht erwünschte Domains umzuschreiben, können Sie ab Weblication® CMS Version 10.x mit aktueller BASE auf bereits vordefinierte Abfragen und Funktionen zurückgreifen.
Ab CMS-Version 011.002.143.000 ist die nachfolgend beschriebene Umsetzung auch direkt über die Maske der Projekteinstellungen des Projekt-/Sprach-Verzeichnisses möglich.
Die pre.php des BASE
Projektes ist bereits im Standard mit den entsprechenden
Funktionsaufrufen ausgestattet, die sich auf Funktionen beziehen, die in
der wMyProject.php definiert sind. Sofern dies in einem älteren Projekt noch nicht vorhanden ist, muss dies manuell nachgezogen werden.
Die genaue Definition der Funktionen (PHP-Code) ist in diesem Artikel nicht angeführt, sondern entnehmen Sie bitte immer der aktuellsten BASE Projektbasis.
// ...
// Hier wird das Weblication Framework eingebunden
include_once($_SERVER['DOCUMENT_ROOT'].'/weblication/grid.php');
// Projektspezifische Funktionen einbinden
include_once($_SERVER['DOCUMENT_ROOT'].'/[IHR-INHALTS-PROJEKT]-wGlobal/wGlobal/scripts/php/wMyProject.php');
// Leitet Aufrufe bei Bedarf um
wMyProject::executeAccessRules();
// ...
// ...
Eine alternative Umsetzung ist die Abfrage über PHP. Setzen Sie hierzu in der pre.php des globalen Projektes nach dem Include der grid.php die Abfrage auf das entsprechende Projekt und die erlaubte Domain.
Diese Umsetzungsvariante ermöglicht zusätzlich die Pflege des "anderen" Projektes über die lizenzierte Domain.
// ...
// Hier wird das Weblication Framework eingebunden
include_once($_SERVER['DOCUMENT_ROOT'].'/weblication/grid.php');
// Projektaufruf nur ueber definierte Domain(s) und Weblication Volltextsuche erlauben
// muss vor der Ausgabe der Seiten gesetzt werden:
if(wUserCur::getName() == ''){
// Abfrage zum /projekt Projekt, um den Aufruf nur ueber die DE-Domain (mit www.) und die Weblication Suche zu erlauben
if(wProjectCur::getPath() == '/projekt' && !preg_match("/^www\.projekt-domain\.de/", $_SERVER['HTTP_HOST']) && wRequest::isSearchBot() === FALSE && !preg_match('/newsletter\/newsletters/', $_SERVER['REQUEST_URI'])){
header("HTTP/1.1 301 Moved Permanently");header("Location:http://www.projekt-domain.de".$_SERVER['REQUEST_URI']);
}
// Abfrage zum /projekt-en Projekt, um den Aufruf nur ueber die EN-Domain (mit www.) und die Weblication Suche zu erlauben
elseif(wProjectCur::getPath() == '/projekt-en' && !preg_match("/^www\.projekt-domain\.com/", $_SERVER['HTTP_HOST']) && wRequest::isSearchBot() === FALSE && !preg_match('/newsletter\/newsletters/', $_SERVER['REQUEST_URI'])){
header("HTTP/1.1 301 Moved Permanently");header("Location:http://www.projekt-domain.com".$_SERVER['REQUEST_URI']);
}
else{
//header("HTTP/1.1 301 Moved Permanently");header("location: http://".$_SERVER['HTTP_HOST'].'/index.php');
}
}
// ...
// ...