[Résolu] Url rewriting, conditions négatives et autres

Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics

Cascou
Nouveau WRInaute
 
Messages: 2
Inscription: Jeu Mai 01, 2008 13:21

[Résolu] Url rewriting, conditions négatives et autres

Message le Lun Sep 22, 2008 15:56

Bonjours à tous, j'ai actuellement quelques petits problèmes pour mettre en place une url rewriting.
Voila le problème :

Ma ré-écriture convertit :
www.monsite.com/Page-Action-Id
En :
www.monsite.com/Index.php?page=Page&action=Action&id=Id
Ou les mots soulignés sont évidement mes variables.

Ma Regex de base :
Code: Tout sélectionner
RewriteRule ^(.+)$ Index.php?page=$1 [L]
RewriteRule ^(.+)-(.+)$ Index.php?page=$1&action=$2 [L]
RewriteRule ^(.+)-(.+)-(.+)$ Index.php?page=$1&action=$2&id=$3 [L]


Chaque ligne est prévue pour un nombre de variables à passer (page seul, page et action, ou les trois réunis).
Le problème c'est qu'avec ce genre de code, l'url des fichiers "inclus" étaient aussi ré-écrits (vu que je n'ai pas de signe distinctif pour les pages à re-écrire tel qu'un "page-" au début de chaque url).

Donc j'ai rajouté :
Code: Tout sélectionner
RewriteCond %{REQUEST_URI} !(Modules|Pages|Images|Fichiers|Style) [NC]
RewriteCond %{REQUEST_URI} !.*/$ [NC]
RewriteCond %{REQUEST_URI} !.*\..{2,4}$ [NC]

Afin d'éviter que les url vers un répertoire du site, ou contenant une extension, ou finissant par un slash (racine d'un répertoire) soient ré-écrites.

Mais un souci persiste.
Mes regex utilisent le point afin de ne pas se prendre la tête avec tout ce qui est caractères spéciaux, mais par conséquant ne font pas la différence quand se trouve un tiret (qui est censé séparer deux variables GET).

Quand la seconde ou troisième ligne devrait prendre le relai, la première garde la priorité.
Code: Tout sélectionner
RewriteRule ^(.+)$ Index.php?page=$1 [L]
RewriteRule ^(.+)-(.+)$ Index.php?page=$1&action=$2 [L]
RewriteRule ^(.+)-(.+)-(.+)$ Index.php?page=$1&action=$2&id=$3 [L]

Le point prend aussi le tiret donc la première ligne est valable en permanence.

J'ai bien essayé de modifier en :
Code: Tout sélectionner
RewriteRule ^([[^\-].]+)$ Index.php?page=$1 [L]

Ou bien :
Code: Tout sélectionner
RewriteRule ^(([^\-]|.)+)$ Index.php?page=$1 [L]

Mais ca ne fonctionne pas (ca devrait pourtant, non ?) oO

Bref, je serais particulièrement reconnaissant si une âme charitable habitué aux méandres de l'url rewriting me filait un petit coup de main, que la je sèche. ^^
Dernière édition par Cascou le Dim Sep 28, 2008 0:02, édité 1 fois.


webmasterlamogere
WRInaute accro
WRInaute accro
 
Messages: 1874
Inscription: Dim Déc 17, 2006 21:08

Message le Mar Sep 23, 2008 8:34

Les règles sont évaluées dans l'ordre. La première qui "match" est retenue. Il faut donc mettre les règles de la plus précise à la plus générale.
Pour éviter de réécrire les répertoires ou les fichiers existants il faut ajouter deux conditions.
Pour "n'importe quel caractère différent de -" il faut mettre "[^-]" à la place de "." (si les paramètres ne contiennent jamais de "-")
Code: Tout sélectionner
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)-(.+)-(.+)$ Index.php?page=$1&action=$2&id=$3 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)-(.+)$ Index.php?page=$1&action=$2 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ Index.php?page=$1 [L]

Cascou
Nouveau WRInaute
 
Messages: 2
Inscription: Jeu Mai 01, 2008 13:21

Message le Dim Sep 28, 2008 0:01

Problème résolu, donc. Grand merci à toi.

Et à tous les autres qui pourraient passer derrière, à retenir :
- Dans une regex, une condition négative se suffit à elle même (inutile de préciser le "ou tout").
- La règle d'url rewriting la plus haut est prise en priorité sur les autres (quand "[L]" qui stipule qu'une seule règle doit s'appliquer par ré-écriture).
- Les tags "!-d" et "!-f" d'une con RewriteCond permettent d'éviter le ciblage de certains éléments (inclus dans une page, répertoire ? A voir).


Formation recommandée sur ce thème :

Formation URL Rewriting et sites dynamiques : apprenez comment mettre en place la réécriture d'URL, comment optimiser vos URL et profiter de vos pages dynamiques pour booster votre référencement. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités