PHP rocks! wünscht allen Mitgliedern einen guten Rutsch ins neue Jahr 2017 !!!
Hinweis: Das Forum zieht um! Um keine Datenverluste zu haben, schalten wir zwecks Übernahme der Daten das Forum am Sonntag, den 24.04.2016 um ca. 21:00 Uhr offline und passen anschliessend die DNS-Einträge an.
www.php-rocks.de wird euch dann nach den Aktualisierungen der DNS-Server wieder wie gewohnt uneingeschränkt zur Verfügung stehen.
Danke für euer Verständnis!

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
PHP Grundlagen Einfache SEO-friendly URL's umsetzen
#1
Was versteht man unter Suchmaschinen optimierten URL's?
Unter einer Suchmaschinen optimierten ( SEO-friendly ) URL versteht man im allgemeinen eine URL mit prägnanten keywords für Suchmaschinen á la Google & Co.
Kurz gesagt, können wir unsere Seiten bereits mit Hilfe der URL für die großen Suchmaschinen interessant machen.

Google bspw. wertet eine Seite mit prägnanten Suchbegriffen höher in der Ergebnisliste, als die Seiten, auf denen die Suchbegriffe "nur" im Content enthalten sind. Natürlich dürfen wir den Content nicht vernachlässigen, denn die URL ist nur einer von vielen Faktoren für die Ergebnisbewertung, wenn auch ein sehr wichtiger.


Der Aufbau unserer SEO-friendly URL
Wir nehmen für dieses kleine Tutorial mal an, daß wir eine Seite unserer Website speziell für PHP-Tutorials haben und diese für die Suchmaschinen optimieren wollen.
Uns interessiert hier erstmal nur der Aufbau der URL.

Nehmen wir also an, wir legen folgende URL für ein Tutorial wie dieses fest:
Code:
http://www.example.com/php-tutorials/seo-friendly-urls-mit-php.html
Damit haben wir eine URL, die über prägnante Suchbegriffe verfügt. Angezeigt werden soll allerdings eine Seite, die in unserem Webspace hier liegt:
Code:
/view/tutorials/seo-friendly-urls-mit-php.php


Muß meine Webstruktur entsprechend der URL aufgebaut sein?
Nein, natürlich nicht. Der ganze Trick ist einfach, die Anfrage intern umzuleiten und den entsprechenden Content vorzublenden. Was sich so einfach anhört, ist in Wirklichkeit auch beinahe so leicht, wie es sich liest.
Um das entsprechend umzusetzen, reicht prinzipiell eine index.php. In größeren Projekten kommt auch eine bootstrap.php zum Einsatz, aber das soll für dieses Tutorial mal ignoriert werden.
Uns reicht wie gesagt fürs erste eine index.php im Webroot.

Der Webserver
Hinweis
Der folgende Abschnitt bezieht sich auf einen Apache HTTP Server ab Version 2.2 mit aktiviertem mod_rewrite! Sollte die Datei .htaccess nicht existeren, muß diese zuvor angelegt werden.
Die erste wichtige Aufgabe übernimmt der Webserver, indem er die Anfrage intern umleitet. Dazu haben wir beim Apache zwei Möglichkeiten. Eine weit verbreitete und schlanke Lösung, die auch in großen Frameworks Anwendung findet bietet uns das mod_rewrite Modul:
Code:
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^ index.php [QSA,L]
Diese Zeilen tragen wir in die .htaccess im Webroot ein. Diese sorgen für die interne Umleitung.
Im Grunde sind die letzten drei Zeilen für uns interessant. Diese teilen dem Webserver mit, daß alle Anfragen, die physikalisch nicht als Datei oder Verzeichnis existieren auf die index.php geleitet werden.

Aber es gibt da noch was: FallbackResource
Mit FallbackResource teilen wir dem Webserver mit, daß es einen sog. Fallback für nicht existente Dateien und Verzeichnisse gibt. Der Webserver nutzt diese FallbackResource und umgeht gleichzeitig einen 404. Im Prinzip also genau das, was wir oben gemacht haben, nur in einer Anweisung.

FallbackResource ist weniger bekannt/verbreitet, wie die erste Variante, aber meiner Meinung nach die sinnvollere und vermutlich auch die performantere Lösung.

Lange Rede, kurzer Sinn: Das was unsere erste Variante macht, erreichen wir ebenfalls stattdessen auf diese Weise:
Code:
FallbackResource disabled
FallbackResource /index.php
Die erste Zeile sorgt dafür, daß vererbte FallbackResource-Einstellungen aus dem Elternverzeichnis deaktiviert werden. Diese ist nur wichtig, wenn es sich nicht gerade um die htaccess im Webroot handelt. Im Normalfall reicht die zweite Zeile alleinstehend.
Hinweis
Die FallbackResource Direktive liefert uns der Apache ab Version 2.2.16. Die Direktive ist allerdings kein Bestandteil des mod_rewrite Modul, sondern dem mod_dir Modul. Ich denke, ein Grund, warum es unbekannter ist, denn jeder der sich mit URL-Rewriting befasst, liest sich assoziativ verständlicher Weise zuerst mal in die Möglichkeiten des mod_rewrite Moduls ein, wo FallbackResource nicht zu finden ist. Den Parameterwert disabled gibt es für FallbackResource übrigens ab der Version 2.2.24 des Apache HTTP Servers!


...und weiter gehts!
Welche der beiden Varianten ihr oben verwendet spielt für den weiteren Verlauf des Tutorials keine Rolle, ihr habt da vollkommene Entscheidungsfreiheit.

Wir gehen also für den Moment davon aus, daß das Verzeichnis php-tutorials/ aus unserer URL nicht existiert.
Die Anfrage landet also aufgrund unserer .htaccess Konfiguration aus dem oberen Abschnitt in der index.php.


Und wie gebe ich nun den richtigen Content aus?
Nun, auch das ist relativ einfach. PHP verwaltet Server-Variablen in dem Superglobalen Array $_SERVER, auf das wir nun zugreifen können.
Unsere Information finden wir unter dem Index REQUEST_URI. Diesen werten wir aus und laden den entsprechenden Content einfach in die index.php.

Es gibt natürlich verschiedene Möglichkeiten dies umzusetzen, für unser kleines Tutorial soll eine kleine switch ... case Fallentscheidung genügen:
PHP-Code:
$aPath pathinfo$_SERVER['REQUEST_URI'] );


switch ( 
$aPath['dirname'] ) {

 
   case '/php-tutorials':
 
       $sIncludePath '/view/tutorials/';
 
       break;
 
   default:
 
       $sIncludePath '/view/content/';
 
       break;

}


include_once 
__DIR__ $sIncludePath $aPath['filename'] . '.php'
Die Funktion pathinfo() versucht aus dem übergebenen Pfad Details zum Pfad ( hier $_SERVER['REQUEST_URI'] ) zu extrahieren und stellt diese dann in den Elementen dirname, basename, extension und filename zur Verfügung. Uns sollen im Moment nur dirname und filename dabei interessieren. Konnten die Informationen gesammelt werden finden wir in $aPath['dirname'] den Verzeichnispfad ( in unserem Beispiel: php-tutorials ) und in $aPath['filename'] den reinen Dateinamen ohne(!) Erweiterung ( hier: seo-friendly-urls-mit-php ).

Der Code macht also nun nichts weiter, als das Verzeichnis auszuwerten und die gewünschte Datei per include_once einzubinden.

Wie man sieht, es ist relativ einfach SEO-friendly URL's in eigenen Projekten zu verwenden.
Der PHP-Teil ist je nach Projekt sicher anders umgesetzt, aber zur Erklärung im Rahmen dieses Tutorials soll das ausreichend sein.


Gehe zu: