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.