Einfache SEO-URLs mit Zend-Routen

Posted by in Allgemein, PHP

Saubere und gut lesbare URLs sind für SEO und auch für den Kunden immer wichtiger. Eine URL im Format http://meinedomain.com/page.php?site=contact ist nicht nur für den Kunden nicht schön zu lesen, sondern auch eine Suchmaschine kann daraus nicht viel ableiten. Die gleiche URL als http://meinedomain.com/contact/ ist doch gleich viel verständlicher. Wer das Zend-Framework einsetzt bekommt dieses Feature glücklicherweise gleich out of the box. Über Controller und Actions wird das alles sauber abgebildet.

Jedoch entwickelt man im Backend in der Regel mit englischen Begriffen. Auch wenn die URL nun schon recht sauber ist, so ist die URL http://meinedomain.com/kontakt/ natürlich noch ein Stück besser. Denn sie ist lokalisiert und ist somit durch entsprechende Keywörter relevanter. Aber wie bekommt man das hin, ohne alle seine Controller umbenennen zu müssen?

Zum Glück gibt es dafür im Zend Routen. Um einen ContactController nach außen als kontakt abzubilden benötigt man eine Configdatei:

routes.contact.type                 = "Zend_Controller_Router_Route"
routes.contact.route                = "/kontakt/:action/*"
routes.contact.defaults.controller  = "contact"
routes.contact.defaults.action      = "index"

Damit wird der ContactController nach außen als kontakt dargestellt. Die Namen der Actions und alle möglichen Parameter werden direkt durchgeschleift. Wenn man seine Actions auch noch umbenennen möchte, muss man nur das :action durch den Namen der Action ersetzen und den Wert von routes.contact.defaults.action durch den korrekten internen Namen der Action ersetzen.

Dann muss man diese Config nur noch seinem Router übergeben:

$config = new Zend_Config_Ini('path/to/routes.ini');
$router = new Zend_Controller_Router_Rewrite();
$router->addConfig($config, 'routes');

Und das wars auch schon. =)

Weitere Beispiele und Hintergründe findet man in der offiziellen Zend-Hilfe.

Was man noch beachten sollte: Wenn man Routen im Projekt einführt müssen auch alle generierten URLs mit Routen arbeiten. Das bedeutet, dass man beim URL-Helper immer eine Route angeben muss. Anstatt null muss dann im Zweifel 'default' übergeben werden, da ansonsten immer die aktuell aktive Route für das Erzeugen von URLs verwendet wird.