URL Rewriting : ajout automatique de regles

Petit nouveau ! | 2 Messages

13 déc. 2008, 20:57

Bonjour à tous,

Je suis entrain de développer un site proposant, via un panneau d'admin, de créer de nouvelles pages.

A l'ajout d'une page, l'utilisateur a la possibilité de spécifier une URL de son choix qui sera utilisée si l'URL rewriting est activée (avec les contrôles de syntaxe qui vont bien), cette URL est ensuite enregistrée, (avec le reste des infos concernant la page) dans la BDD (MySQL).

Exemple d'une page enregistrée dans la base :

page_id : '6'
page_pretty_url : 'une_bien_jolie_url'
page_content : ...

Sans URL rewriting, pas de problème, cela donne http://example.com/index.php?pid=6
Et je souhaiterais donc obtenir l'url réécrite : http://example.com/une_bien_jolie_url/

Je me suis déjà occupé de la transformation des liens de façon automatique dans le site.

Je pensais procéder de la facon suivante pour l'url rewriting :

- récupérer le champ `page_pretty_url`dans la BDD
- Créer une variable contenant la règle de réécriture (utilisant les regex, normal quoi)
- Utiliser cette variable (règle donc) dans le fichier .htaccess

Mais le hic, c'est qu'il est impossible d'utiliser une variable PHP dans le .htaccess étant donnée que celui-ci est traité avant les instructions PHP.

Ce que je n'arrive pas a réaliser c'est donc l'automatisation des règles d'url rewriting, car je me voit mal scruter les pages ajoutées et éditer le .htaccess à chaque fois.

Merci d'avance à ceux qui pourront m'éclairer !

Eléphant du PHP | 170 Messages

13 déc. 2008, 21:16

bonsoir,
Sans URL rewriting, pas de problème, cela donne http://example.com/index.php?pid=6
l'idéal aurait été que tu aies :

Code : Tout sélectionner

http://example.com/index.php?ppurl=une_bien_jolie_url
la réécriture d'URL aurait été facile ( une seule ligne pour tous les cas )

tu ne peux pas faire en sorte que ?

Petit nouveau ! | 2 Messages

13 déc. 2008, 21:49

Merci pour d'avoir répondu, mais je crois avoir trouver la solution grâce à la technique suivante :

Dans le .htaccess, on écrit les règles suivantes :

Code : Tout sélectionner

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
Cela a pour effet de renvoyer n'importe quelle URL saisie vers le fichier index.php, dans lequel on va pouvoir analyser l'URL demandée par le client, si celle-ci correspond a une règle de réécriture, alors on affiche la page correspondante (sinon une erreur 404, un message d'erreur; etc.).
Simple et efficace !

PS : C'est cette technique qui est utilisée sur Wordpress (par exemple)