Doppelten Content durch WCF-Plugins vermeiden

Achtung: Diese Seite ist nur noch Teil eines Archivs und wird in Zukunft entfernt.

Wie schon in einem anderen Artikel beschrieben, mögen Suchmaschinen doppelten Content (Inhalt) nicht sehr gerne. Mir fiel allerdings auf, dass Plugins für Community Framework in jeder Endanwendung nutzbar sind.

Bei einer Endanwendung mag das egal sein, da hier das Plugin auch nur von dieser Endanwendung aus aufgerufen werden kann. Sind es jedoch mehrere Endanwendungen, kann das Plugin von jeder aus aufgerufen werden und stellt somit dieselben Inhalte unter verschiedenen Endanwendungen und damit auch unter anderen Adressen bereit.

Um das zu umgehen und suchmaschinenopmitiert (SEO) darzustellen, kann man z.B. mit mod_rewrite unter Apache oder vergleichbarem unter IIS, Lighttpd und wie sie alle heißen, arbeiten.
Da ich selbst bekannterweise den Apache Webserver nutze, werde ich folgend nur auf diesen eingehen.

Ziel der Umschreibung ist es, bei einem Plugin, das den Aufruf über domain.tld/index.php?page=ExamplePlugin macht, auf domain.tld/ea2/index.php?page=ExamplePlugin umzuleiten. Damit würden auch Aufrufe von domain.tld/example/index.php?page=ExamplePlugin auf domain.tld/ea2/index.php?page=ExamplePlugin umgeleitet werden, so dass das Plugin wirklich nur noch im Verzeichnis /ea2 aufgerufen wird.
Hierbei kann man mit der globalen Variable {QUERY_STRING} in mod_rewrite arbeiten. In dieser Variable werden alle Informationen hinter dem ? in der URL gespeichert. Diese muss dann verglichen werden, ob sich darin die Variable "page" mit dem Inhalt "ExamplePage" handelt. Wenn das so ist, wird man entsprechend ins Verzeichnis /ea2 weitergeleitet.

Der Code hierfür lautet wie folgt:

Quellcode

  1. <IfModule mod_rewrite.c>
  2. RewriteEngine On
  3. RewriteCond %{QUERY_STRING} ^page=ExamplePlugin(.*)$
  4. RewriteRule ^(|index.php)$ /ea2/index.php?%{QUERY_STRING} [R=301,L]
  5. </IfModule>
Zur Erklärung der Zeilen:
Alles zwischen Zeile 1 und 5 wird nur dann eingelesen, wenn das Modul mod_rewrite in der Webserver-Konfiguration aktiviert ist.
Zeile 2: Das Modul wird eingeschaltet, so dass es Umschreibungen vornimmt.
Zeile 3: "RewriteCond" steht für "rewrite condition", was übersetzt etwa "Umschreibungsbedingung" heißt. Dieser Teil muss demnach erfüllt sein, damit die "RewriteRule", die "Umschreibungsregel" in Zeile 4 durchgeführt werden kann.
Es wird der oben genannte {QUERY_STRING} überprüft, ob er mit "page=ExamplePlugin" beginnt. Das (.*) danach bedeutet, dass hier noch eine beliebige Zeichenkette folgen kann, z.B. eine Session oder andere Teile der Plugin-Seite z.B.
Zeile 4: Wenn die Bedingung erfüllt ist, wird die Umschreibung vorgenommen. In diesem Falle heißt das, dass sowohl ein Link, der nur den {QUERY_STRING} enthält (z.B.: domain.tld/?page=ExamplePlugin) als auch ein Link, der mit der index.php beginnt (z.B.: domain.tld/index.php?page=ExamplePlugin), umgeschrieben wird. Dieser Link wird dann in das entsprechend gewünschte Verzeichnis (hier /ea2) mit einer index.php umgeschrieben (nicht zwingend notwendig, allerdings schöner und so, wie es normal in Community Framework gehandhabt wird) und der {QUERY_STRING} angehängt, damit die Zielseite genau dasselbe ist, wie die gewünschte Seite, nur eben im neuen Verzeichnis.

Den entsprechenden Code muss man lediglich als Datei namens ".htaccess" (ohne "") im Wurzelverzeichnis der Domain speichern, so dass sie unter domain.tld/.htaccess aufrufbar wäre (standardmäßig ist ein Aufruf nicht möglich).

Ich hoffe, dass diese kleine Einführung in mod_rewrite mit RegEx niemanden überfordern wird, ansonsten sind Fragen und Feedback gerne gesehen :)
Über den Autor
Ich bin Webentwickler in Stuttgart und administriere Server seit vielen Jahren. In diesem Blog erstelle ich hauptsächlich Tutorials für andere Webentwickler, Webdesigner und Serveradministratoren.
-------------------------------------------------------------------------------------------------------------------------------------
I’m a web developer in Stuttgart, Germany, and server administrator since many years. This blog mainly contains a tutorial set for other web developer, web designer and server administrators.

649 mal gelesen

Kommentare 4

  • Black Rider -

    Man braucht auch keinen direkten Zugriff auf die Apache-Konfiguration. Dennoch sollte zuerst die Abfrage angegeben werden, ob das entsprechende Modul auch aktiv ist. ;)

  • RedXell -

    Hallo BlackRider!

    Vielen dank für diese Erklärung. Es gibt aber Leider Leute, die keinen direkten Zugang auf die Apache-Konfigurationen haben. Aus diesem Grund habe ich mal versucht deine Erklärung in eine .htaccess zu packen und ich hatte auch Erfolg!

    Hier die Einträge der .htaccess

    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^page=MembersList(.*)$
    RewriteRule ^(|index.php)$ /verzeichnis/index.php?%{QUERY_STRING} [R=301,L]
    RewriteCond %{QUERY_STRING} ^page=User&userID(.*)$
    RewriteRule ^(|index.php)$ /verzeichnis/index.php?%{QUERY_STRING} [R=301,L]

    Der erste RewirteCond ist im Grunde das, was du in diesem Artikel erklärt hast. Der zweite leitet aber die Benutzerprofile weiter in die dementsprechende Endanwendung. Und dies kann man alles in eine .htaccess Datei packen. Ich hoffe das hilft auch anderen Menschen, die mehrere Endanwendungen haben :D

  • Black Rider -

    Ganz genau. Damit kannst du bestimmen, dass der Link zum Blog in diesem Beispiel nur noch von einer Endanwendung genutzt werden kann.
    Alle anderen werden dann umgeleitet.

  • ruhrpottbobo -

    Wenn ich die Filebase habe und ich rufe den Blog, Spielhalle oder Kalender entweder aus dem Forum oder der Filebase auf, ist das dafür gedacht ?