Eine Yii Url bearbeiten
Ich habe mir heute Gedanken gemacht, wie man bei einem Yii Projekt die URL’s SEO gerecht machen kann. Also quasi Yii Speaking Urls. Jedes Projekt, was einen Vermarktungsweg über Google oder Suchmaschinen im allgemeinen findet, benötigt früher oder später noch eine Onpage SEO Optimierung. In Yii haben wir die Möglichkeit, die Yii URL ’s ganz einfach anzupassen. Hier möchte ich einige Beispiele zeigen, wie man diese Aufgabe bewältigen kann.
Konfiguration
In der Basis-Konfiguration können wir einige Parameter einfach anpassen, ohne die Funktionalität zu stören. Wenn wir eine Yii Applikation erstellen, finden wir folgende Konfiguration auskommentiert vor:
1 2 3 4 5 6 7 8 | 'urlManager'=>array( 'urlFormat'=>'path', 'rules'=>array( '<controller:\w+>/<id:\d+>'=>'<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', ), ), |
Wenn wir diese Konfiguration einkommentieren, bekommen wir eine yii url im Format http://www.domain.tld/index.php/controller/action. Mal angenommen, uns sticht das index.php direkt ins Auge. Dieses möchten wir gerne Entfernen. Nun kommen wir schon nicht mehr ohne eine .htaccess aus. Um unser Ziel zu erreichen müssen wir unsere Konfiguration wie folgt ändern:
1 2 3 4 5 6 7 8 9 | 'urlManager'=>array( 'showScriptName'=>false, 'urlFormat'=>'path', 'rules'=>array( '<controller:\w+>/<id:\d+>'=>'<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', ), ), |
Wir fügen hier also noch showScriptName ein und geben dem Konfigurationswert false.
Außerdem müssen wir noch eine .htaccess mit folgendem Inhalt im Hauptverzeichnis (wo die index.php liegt) erstellen.
1 2 3 4 5 6 7 8 | RewriteEngine on # Wenn ein Verzeichnis oder eine Datei Existiert, liefere sie aus RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # ansonsten leite Sie weiter zur index.php RewriteRule . index.php |
Was macht den nun dieser Schnipsel hier? Nun wir Prüfen mit den zwei angegebenen RewriteCond Conditions, ob die angeforderte URL ein real existentes Verzeichnis oder eine real existente Datei ist. Ist dies der Fall, so rufen wir diese Datei auf. Ist dies nicht der Fall, rufen wir die index.php auf. Und die ist ja genau unser Eintrittspunkt zum Yii Framework
Klassen
Wir können in Yii auch eine komplette eigene Klasse definieren, um unsere Yii Url für unsere Actions nach unseren Vorstellungen auszugeben. So können wir Beispielsweise auch Speaking Url’s auf Controller Actions vergeben. Denkbar wäre, dass diese im Anschluss über ein Backend verwaltet werden und in der Datenbank gespeichert werden. Im Anschluss könnten wir via ActiveRecord dann diese Daten verwenden. Ich möchte jetzt hier allerdings nicht zu sehr auf diese Klasse eingehen, da dies dann doch so individuell wird, dass ich keine allgemeine Version vorhersehen kann. Eine Beispielklasse könnte wie folgt lauten:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class OwnUrlRule extends CBaseUrlRule { public function createUrl($manager,$route,$params,$ampersand) { if ($route==='example/index') { return 'völlig_andere/url'; } return false; } public function parseUrl($manager,$request,$pathInfo,$rawPathInfo) { if (preg_match('%^(\w+)(/(\w+))?$%', $pathInfo, $matches)) { // hier können wir jetzt prüfen was eingeht. // Anschließend sollten wir unsere Url dann wieder in // einen Zustand bringen damit Yii etwas damit anfangen // kann. Also in ein Format wie controller/action. } return false; // this rule does not apply } } |
Natürlich müssen wir darauf achten, dass unsere .htaccess Datei auch mit den URL’s die wir erstellen mitspielt. Sonst ist die Seite nicht mehr aufrufbar.
Funktionen
In der Regel verwenden wir zum Beispiel
1 | Yii::app()->createUrl('controller/action', array('id' => $this->id)) |
um eine Yii Url zu erstellen. Im Prinzip können wir es so sehen dass die Funktion createUrl() aus der oben genannten Klasse verwendet wird.