Question simple sur des rewrite rules dynamiques

Nouveau WRInaute
Bonjour à tous,

Le but de ma question n'est pas de rentrer dans les détails des expressions régulières.
J'aimerais pouvoir gérer dynamiquement les rewrite rules.
Des rewrite rules simples poseraient assez vite des problèmes.

Ex:
http://www.monsite/main.php?&lang=fr&le ... level2=web
URL publique:
http://www.monsite/fr/news/web

les rewrite rules --> remplacer:

/fr/ --> /main.php?&lang=fr/
/news/ --> &level1=news
/web --> &level=web

http://www.monsite/main.php?&lang=fr&le ... evel2=news
URL publique:
http://www.monsite/fr/videos/news/

On a déjà un conflit avec les règles précédentes, car /news/ ne doit pas être remplacé de la même manière dans les deux cas.

La solution sera alors d'être moins unitaire sur les rewrite rules et définir des règles du genre:

remplacer /videos/news par &level1=videos&level2=news

Mais du coup, on a une règle par niveau du site et je ne suis pas sûre que ce soit intéressant au niveau performance.

Pouvez-vous me dire ce que vous en penser et me donner des conseilles dur la gestion dynamique des rewrite rules pour des gros sites portails?

Merci.
 
WRInaute occasionnel
Salut

Et une structure comme ça ne fonctionnerait elle pas ?
Code:
etc...
rewriterule ^/(.+)/(.+)/(.+)/(.+)/(.+) /main.php?lang=$1&level1=$2&level2=$3&level3=$4&level4=$5 [L]
rewriterule ^/(.+)/(.+)/(.+)/(.+) /main.php?lang=$1&level1=$2&level2=$3&level3=$4 [L]
rewriterule ^/(.+)/(.+)/(.+) /main.php?lang=$1&level1=$2&level2=$3 [L]
rewriterule ^/(.+)/(.+) /main.php?lang=$1&level1=$2 [L]
Car à ma connaissance, il n'est pas possible de gérer dynamiquement les règle ... ou du moins simplement. A moins que j'aye mal compris ta question. :?

Maintenant je ne connais pas la structure exacte de ton site, il se peut donc que mon idée rentre en conflis avec d'autre page.

... Ou alors une règle genérique style
rewriterule ^/.+ /main.php
et tu te débrouille dans ton code PHP pour décomposé ton arrborécence fournis par la variable $HTTP_GET_VARS['REQUEST_URI']

A voir.
 
Nouveau WRInaute
Merci magic corp.
Ca règle le problème que j'ai énoncé, mais j'en ai d'autres. :)

Si mes URLs contiennent dans la query string à la fois des paramètres qui servent à identifier le level et des paramètres propres à une page bien spécifique, comment les différencier?

Considérons l'arborescence suivante:

home
news
--actualité nationale
--actualité internationale
----europe
----reste du monde
forum

Dans mon CMS, chaque level identifie un fichier PHP.
ex: home.php, new.php,actualite_nationale.php, ...
Ces fichiers PHP peuvent aussi avoir des paramètres.

Ex:

http://www.monsite/main.php?&lang=fr&le ... liste=paul
URL publique:
http://www.monsite/fr/news/actualite-na ... liste/paul

level1=news&level2=actualite-nationale --> identifie le fichier PHP
filter=journaliste&journaliste=paul --> paramètres du fichier PHP

La question, comment savoir que journaliste et paul sont des paramètres du fichier et pas des levels?

La seule solution que je vois à ça est de mettre les règles en dure pour chaque level, ce qui permettra d'identifier le fichier PHP.
Une fois qu'on a le fichier, on lui passe le reste de l'URL en vrac et le fichier se débrouille ( ?reste_de_l_URL=/journaliste/paul dans notre exemple). Solution énoncé par magic corp aussi.

Mais le problème est qu'on va devoir reconvertir les chiffres car ils seront considérés comme une string.

Y-a-t'il d'autres solutions?
 
Nouveau WRInaute
Le long URL avec les ...
monsite/main.php?&lang=fr&level1=news&level2=actualite-nationale&filter=journaliste&journaliste=paul
 
WRInaute occasionnel
:D Ca se complique ... Je tenterais :
Code:
rewriterule /(.+)/journaliste/(.+)$ /$1?filter=journaliste&journaliste=$2

rewriterule ^/(.+)/(.+)/(.+)/(.+)/(.+) /main.php?lang=$1&level1=$2&level2=$3&level3=$4&level4=$5 [QSA, L]
rewriterule ^/(.+)/(.+)/(.+)/(.+) /main.php?lang=$1&level1=$2&level2=$3&level3=$4 [QSA, L]
rewriterule ^/(.+)/(.+)/(.+) /main.php?lang=$1&level1=$2&level2=$3 [QSA, L]
rewriterule ^/(.+)/(.+) /main.php?lang=$1&level1=$2 [QSA, L]
Ce qui devrais convertir :

h**p://www.example.com/fr/news/actualite-nationale/journaliste/paul
en
h**p://www.example.com/fr/news/actualite-nationale?filter=journaliste&journaliste=paul

Et comme cette règle n'a pas de flag [L] on continue dans les règles du dessous et on suis le cheminement standard de gestion des catégorie.

Soit pour l'exemple sité, cette règle rewriterule ^/(.+)/(.+)/(.+) /main.php?lang=$1&level1=$2&level2=$3 [QSA, L]

Et on devrait retomber sur nos pattes ... à vérifier :?
 
Nouveau WRInaute
J'ai finalement laisser tomber l'idée de gérer complètement les rewrite rules de manière dynamique au niveau de mon CMS. C'est presque impossible car il faut descendre jusqu'au niveau des VALEURS des paramètres (journaliste, paul dans l'exemple ci-dessus) pour pouvoir tout gérer.
Merci à tous et particulièrement à magic corp.
Bon référcement à tous.
 
Discussions similaires
Haut