[Résolu] Url rewriting, conditions négatives et autres
3 messages • Page 1 sur 1
Consultez la formation URL Rewriting et sites dynamiques de WebRankInfo / Ranking Metrics
[Résolu] Url rewriting, conditions négatives et autres
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 :
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é :
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é.
Le point prend aussi le tiret donc la première ligne est valable en permanence.
J'ai bien essayé de modifier en :
Ou bien :
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. ^^
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

- Messages: 1874
- Inscription: Dim Déc 17, 2006 21:08
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 "-")
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]
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).
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).
3 messages • Page 1 sur 1
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 :
- 3ème partie de l'article .htaccess : les réécritures conditionnelles
- Tutoriel URL Rewriting
- Suite de l'article sur le fichier .htaccess : l'URL rewriting
- l'URL Rewriting expliqué aux débutants
- Optimiser le référencement d'un forum phpBB : réécriture d'URL
- L'URL Rewriting expliqué aux débutants
- Ecrire un sitemap pour Google News
- Le référencement de pages PHP
- Gestion des langues et des sessions en PHP / MySQL
- Guide d'optimisation des redirections pour le référencement
- Liste des backlinks
Cet outil vous permet d'analyser en détails la "popularité" de votre site sur Google. En plus du nombre de liens pris en compte par Google, il calcule le pourcentage de liens internes parmi tous les liens, et il affiche les premières URL trouvées.
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

le forum