Jelix, lighttpd et les cool URLs
Le jeudi 12 juillet 2007 à 23:22 dans Living the web
Pour mes développements professionnels j'utilise le framework Jelix et le serveur web lighttpd. J'aime aussi mettre en place de jolies URLs, comme par exemple avec le comparateur Kayuko (ex: http://www.kayuko.com/dvd/1f69wlmf8/les-blancs-ne-savent-pas-sauter).
Voici un billet pour montrer comment je procède pour arriver à obtenir une URL telle que http://mydomain.tld/foo/bar/
Je suppose que vous savez développer avec Jelix.
Jelix : moteur d'URLs significant
Nous configurons d'abord l'application pour utiliser le moteur d'URLs significant. Éditons var/config.defaultconfig.ini.php :
[urlengine] engine = significant
Jelix : configurer le fichier urls.xml
Maintenant que nous avons spécifié à l'application qu'il fallait utiliser le moteur d'URLs significant, nous allons indiquer la forme de l'URL que nous voulons générer (http://mydomain.tld/foo/bar/) et à quelle action elle sera rattachée (default~default_foobar).
Nous utilisons le point d'entrée index.php par défaut.
Créons le fichier var/config/urls.xml suivant :
<urls xmlns="http://jelix.org/ns/urls/1.0">
<classicentrypoint name="index" default="true" noentrypoint="true">
<url pathinfo="/foo/bar" module="default" action="default_foobar"/>
</classicentrypoint>
</urls>
Je vous laisse vous reporter à la documentation de Jelix sur le moteur significant. On notera cependant ici l'attribut noentrypoint="true" sur la balise <classicentrypoint>. C'est cet attribut qui va faire que Jelix générera les URLs sans le point d'entrée. On vient donc de supprimer index.php de nos URLs.
Lighttpd : règles de réécriture d'URLs
À ce point, nous avons configuré notre application pour qu'elle utilise le moteur significant, nous avons aussi configuré l'URL http://mydomain.tld/foo/bar liée à l'action default~default_foobar. Enfin nous avons demandé à Jelix de ne pas générer le point d'entrée dans les URLs que l'application va générer.
Maintenant il nous reste à écrire une règle de configuration sur le serveur web afin que notre URL puisse fonctionner. En effet pour le moment http://mydomain.tld/foo/bar ne fonctionne pas puisque qu'il n'existe pas de répertoires physiques foo/bar dans notre document_root.
Il faut donc rediriger les requêtes vers le point d'entrée index.php
Voici comment je m'y prends avec lighttpd :
$HTTP["host"] =~ "^mydomain.tld" {
server.document-root = "/var/www/mydomain.tld/myapp/www/"
url.rewrite-once = (
"^/medias.+" => "$0",
"^/(.+)" => "/index.php/$1"
)
}
Ici vous voyez en fait 2 règles :
- La première me sert à ne pas rediriger les requêtes commençant par http://mydomain.tld/medias. La raison est que je créé le répertoire www/medias/ et c'est là que je mets les images, les feuilles de style et les fichiers javascripts de mon application. Ces requêtes n'ont en effet pas à être redirigées vers index.php mais doivent être servies telles qu'elles pour pouvoir accéder à ces fichiers.
- La deuxième, elle, effectue donc le redirection.
En vous rendant à l'adresse http://mydomain.tld/foo/bar vous devriez donc lancer l'action default~default_foobar.
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.