• # URL rewriting

    Posté par . En réponse au message Comment faire une redirection avec htaccess ?. Évalué à 3.

    salut dark_moule,

    en supposant que tu tournes avec un serveur apache, sous linux, la première chose à faire, c'est de charger le module d'apache qui permet de faire de la réécriture d'url (url rewriting).

    Pour charger un module dans apache : a2enmod, et le module s'appelle mod_rewrite.

    Ensuite, comme tu as trouvé dans tes recherches, il faut utiliser un fichier .htaccess.
    Commence par le créer à la racine de ton site.

    Dans le fichier, ajoute ces trois directives :

    AddDefaultCharset UTF-8
    Options +FollowSymlinks
    RewriteEngine on


    Ensuite, il faut écrire des règles de réécriture.

    Contrairement à ce qu'on pourrait croire avant de commencer, une règle ne sert pas à transformer machin=truc&bidule=chouette en machin/truc/bidule/chouette, mais l'opération inverse !
    En effet, dans le code HTML de ton site, tu indiques des adresses de la deuxième forme, et ce sont les fameuses règles de réécriture qui vont les convertir en des adresses compréhensibles par PHP (donc de la première forme).

    Au passage, il faut connaître les bases des expressions régulières pour comprendre la réécriture d'url (Google est ton ami)

    Voici un exemple de règle :

    RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)$ /index.php?module=1ドル&action=2ドル&id=3ドル [L]

    Cette règle permet de transformer par exemple :

    /articles/lire/14 en index.php?module=article&action=lire&id=14

    L'option [L] indique à apache de ne pas examiner les règles suivantes si l'adresse à convertir correspond à la règle en question. Par exemple :

    RewriteRule ^([a-z]+)/([a-z]+)/([0-9]+)$ /index.php?module=1ドル&action=2ドル&id=3ドル [L]
    RewriteRule ^([a-z]+)/([a-z]+)$ /index.php?module=1ドル&action=2ドル [L]
    RewriteRule ^([a-z]+)$ /index.php?module=1ドル [L]


    Ces trois règles permettent de convertir respectivement les url suivantes :

    /articles/lire/14 en index.php?module=articles&action=lire&id=14
    /articles/lister en index.php?module=articles&action=lister
    /articles en index.php?module=articles

    La directive [L] empêche qu'une url compatible avec la première règle soit "cassée" par la deuxième ou la troisième règle.