PluXml.org

Blog ou CMS à l'Xml

Utiliser l'URL Rewriting avec Nginx(Edit)

Testé avec Nginx 0.8.53 et PluXML 5.0.2.

Configuration d'Nginx(Edit)

Commencez par éditer le fichier de configuration de Nginx (exemple avec une installation sur Ubuntu):

sudo nano /etc/nginx/sites-available/default

Puis ajoutez ces lignes:

server{
   # Ici des lignes de configuration à ne pas toucher...
   
   # On cache le fichier version:
   location /version {
        return 404; 
   }
   
   # Ligne très importante pour éviter le vol de mot de passe
   location /data/configuration/users.xml {
        return 403;
   }

   # Et on défini les règles pour l'URL Rewriting:
   if (!-f $request_filename){
        set $rule_0 1$rule_0;
   }
   if (!-d $request_filename){
        set $rule_0 2$rule_0;
   }
   if ($request_filename !~ "-l"){
        set $rule_0 3$rule_0;
   }
   if ($rule_0 = "321"){
        rewrite /([feed\/].*)$ /index.php? last;
   }
   rewrite /feed\/(.*)$ /feed.php? last;

} 

Quittez ensuite nano grâce à la combinaison Ctrl+X puis redémarrez Nginx grâce à la commande suivante:

sudo service nginx restart

Configuration de PluXML(Edit)

Allez dans l'administration de votre site PluXML (http://www.votresite.tld/core/admin) et activez l'URL Rewriting. Pour cela, allez dans le menu Paramètres puis dans le sous-menu Configuration avancée). Vous pouvez dès à présent supprimer le fichier .htaccess créé automatiquement à la racine de votre installation de PluXML. Allez sur votre site, vous remarquez que votre liens sont différents: ça marche!

Simplification et optimisation de l'url rewriting(Edit)

J'ai passé beaucoup de temps à essayer de comprendre le groupe de ligne !-f !-d "-l" ... Or il existe une règle magique dans Nginx qui réalise les 3 fonctions d'un coup : -e ! D'où le disparition des 3 tests par un unique test :

if (!-e $request_filename) {                                                                                                                                                                             
       rewrite /([feed\/].*)$ /index.php? last;                                                                                                                                                              
} 

FIXME : Attention il faut lire 'rewrite /(&.*)$ /index.php?$1 last;'

"$1" n’apparaît pas dans le code !!