[PHP] [Tutorial]Suchmaschinen optimierte URLS (mod_rewrite)

Dieses Thema im Forum "Webentwicklung" wurde erstellt von pleq, 4. Oktober 2008 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 4. Oktober 2008
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    [Tutorial]Suchmaschinen optimierte URLS (mod_rewrite)

    Suchmaschinen optimierte URLS (mod_rewrite)
    Bild

    Übersicht
    1. Einleitung
    2. .htaccess
    3. Anwendung in PHP

    1. Einleitung

    Bevor ich anfange, ein kleines, übersichtliches Tutorial zur Anwendung von Suchmaschinen optimierten URLS zuschreiben, erkläre ich euch kurz das eigentlich wichtige Modul für die SEO (Engl.: Search Engine Optimization = De.: Suchmaschinen Optimierung).

    Mod_rewrite:
    Apache stellt zur URL Manipulation ein elementares Modul, das sogenannte mod_rewrite Modul, zur Verfügung. Von dem User definierte Regeln erlauben es, URL´s dynamisch oder auch individuell umzuschreiben (rewrite = umschreiben). Reguläre Ausdrücke werden geparst, sodass angeforderte URL`s verändert werden können.

    Ich möchte sagen, dass ich lediglich ein kleines Beispiel zeige, welches noch lange nicht alle Regeln und Möglichkeiten des Apache Moduls ausnutzt. Für Erweiterungen, Modifizierungen kann ich das Mod_rewrite Forum empfehlen!

    2. htaccess

    (engl. Hypertext Access – „Hypertext-Zugriff“)
    Die htaccess-Datei ist eine Konfigurationsdatei mit dessen Hilfe spezifische Einstellungen auf einzelne Verzeichnisse eines Webservers übertragen werden können.

    Beispiele:

    - Zugriffsschutz (Eingabe von vorher definierten Benutzerdaten ist erforderlich um das geschützte Verzeichnis aufzurufen)
    - URL-Design ( url.de/news/ wird automatisch auf url.de/index.php?site=news umgeleitet)

    Sicherlich gibt es noch mehrere Beispiele eine htacces-Datei zu verwenden, allerdings möchte ich an dieser Stelle nicht zu weit vom eigentlichen Tutorial abdriften.

    3. Anwendung in PHP

    Eine Kombination von htacces (Mod_rewrite Modul) und PHP ermöglicht es, SEO Url´s zu generieren und umzuleiten.

    Der Befehl $_SERVER['REQUEST_URI'] gibt den Teil der URL wieder, der nach der eigentlichen Domainendung steht.

    Beispiel:

    Url-Eingabe: http://localhost/test.php

    PHP:
    echo  $_SERVER [ 'REQUEST_URI' ]
    Ausgabe: /test.php

    Die eigentliche Domain ist in diesem Fall http://localhost/ ... der restliche Teil der URL wird somit in der PHP-Kontante gespeichert.

    Diese Kontante ist die Grundlage für unser Vorhaben. Angenommen die eingegebene URL würde wie folgt lauten:

    http://localhost/news/detail/1/

    Wir könnten den Teil: /news/detail/1/ nun mit Hilfe von $_SERVER['REQUEST_URI'] ansprechen.
    Es gibt diverse Möglichkeiten mit Hilfe dieses Befehls eine SEO Urls zu generieren. Ich werde allerdings nur die für mich einfachste und am besten anzupassende Möglichkeit erklären.

    Ich habe eine vereinfachte Funktion geschrieben, die zuerst die URL in seine Einzelteile zerlegt und in einem neuen Array speichert:

    PHP:
    function  geturl ()
    {
        
    $url = $_SERVER [ 'REQUEST_URI' ];  //URL in $url speichern
        
    $datenurl = explode ( "/" , $url );  //Die URL Anhang des Seperators / in seine Einzelteile zerlegen
        
    $ausgabe =array();  //Ein Array erzeugen in welches wir nun die eizelnen URL Bestandteile schreiben
        
    foreach( $datenurl  AS  $daten )
            {
                
    array_push ( $ausgabe $daten );  //Jeden Teil der URL in das Array als neues Element schreiben
            
    }
        return 
    $ausgabe //Das neue Array mit den Einzelteilen zurückgeben
    }
    Schreiben wir in unsere index.php nun folgendes:

    PHP:
    $url = geturl ();
    Die Variable $url ist ein Array welches die einzelnen Url Bestandteile enthält:

    Url: http://localhost/news/detail/1/

    $url[0]='news'
    $url[1]='detail'
    $url[2]='1'

    So sind nun die einzelnen Befehle aufzugreifen. In meiner Umsetzung habe ich $url[0] als das Modul definiert welches via PHP includiert werden soll.
    Sprich index.php?site=news wäre in meinem Fall index.php?site=$url[0].
    Dies ist allerdings nur für die Überlegung und Umsetzung interessant.

    Wenn man nun http://localhost/news/detail/1/ eingibt, würde nichts passieren. Es würde ein Fehler auftreten. Nun kommt die .htaccess Datei ins Spiel:

    Als erstes öffnet ihr den Datei-Editor, geht unter Datei->Speichern unter und wählt dort bei Dateitypen "Alle Dateien" aus und gebt als Datei-Namen ".htaccess" ein.
    Jetzt habt ihr erfolgreich eine htaccess Datei erzeugt. Die htaccess Datei legt ihr in euern Ordner wo auch die index.php liegt.
    Eine leere htaccess Datei hat natürlich noch keine Auswirkungen. Nun kommt das Apache Modul mod_rewrite ins Spiel.

    Hier einmal die komplette htaccess Datei für unsere SEO Url´s:

    Code:
    RewriteEngine On 
    //Das Apachemodul wird eingeschaltet
    Options +FollowSymlinks 
    //Apache soll symbolischen Links folgen
    RewriteBase / 
    //Wenn eure index.php in dem Unterordner /page/ liegt musste /page/ als RewriteBase festgelegt werden 
    Es ist quasi die Angabe des Standorts der htaccess Datei vom Server-Root aus gesehen
    RewriteRule ^[^\.]*[^/]$ /$0/ [R=301] 
    RewriteRule ^(.*)/$ index.php [L]
    //Dies sind die Regeln für das Apache Modul - Sie bewirken, dass Urls wie news/detail/1 nicht auf eben diesen 
    Ordner führen sondern dass im Hintergrund solche URLS auf die index.php umgeleitet werden
    
    Ich habe jetzt nicht die komplette Syntax für die RewriteRules erklärt da dies zu kompliziert wäre.

    Wenn ihr folgende Url nun mit dieser eben beschriebene htaccess Datei aufruft werdet ihr staunden:

    http://localhost/news/detail/1/

    Eure index Datei wird angezeigt!

    Jetzt müsst ihr nur noch das jeweilige Modul includieren.

    PHP:
    $url = $url [ 0 ];
    include(
    'modul/$url' );
    Dies ist natürrlich sehr einfach gehalten aber Sicherheitslücken usw. könnt ihr natürlich erweitern!
    Ist jetzt ein Modul geladen könnt ihr weiterhin über $url[1] oder $url[2] eine bestimmte Aktion hervorrufen:

    PHP:
    //News.php
    if( $url [ 1 ]== 'detail' )
    {
     
    $q = mysql_query ( 'SELECT * FROM news WHERE ID="' . $url [ 2 ]. '");
     ...
    }
    Viel Spaß beim Probieren!

    Bei Fragen einfach PM oder hier im Thread
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.