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

Discussion dans 'URL Rewriting et .htaccess' créé par Cascou, 22 Septembre 2008.

  1. Cascou
    Cascou Nouveau WRInaute
    Inscrit:
    1 Mai 2008
    Messages:
    2
    J'aime reçus:
    0
    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:
    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:
    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:
    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:
    RewriteRule ^([[^\-].]+)$ Index.php?page=$1 [L]
    Ou bien :
    Code:
    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. ^^
     
  2. webmasterlamogere
    webmasterlamogere WRInaute passionné
    Inscrit:
    17 Décembre 2006
    Messages:
    1 647
    J'aime reçus:
    1
    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:
    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]
     
  3. Cascou
    Cascou Nouveau WRInaute
    Inscrit:
    1 Mai 2008
    Messages:
    2
    J'aime reçus:
    0
    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).
     
Chargement...
Similar Threads - [Résolu] rewriting conditions Forum Date
redirection apres rewriting [résolu] URL Rewriting et .htaccess 20 Décembre 2010
[Résolu] - php - URL Rewriting chez free (free.fr) Développement d'un site Web ou d'une appli mobile 23 Juillet 2010
[résolu] tirets dans url rewriting ??? Débuter en référencement 5 Juin 2010
[RESOLU] Comment trouver les liens créés par l'URL Rewriting URL Rewriting et .htaccess 18 Mai 2010
[RESOLU] Offre Perso, Joomla1.5 et URL Rewriting URL Rewriting et .htaccess 2 Mars 2010
[résolu] Erreur 500 avec EasyPHP 5.3.0 et les URL rewriting URL Rewriting et .htaccess 10 Février 2010
[Résolu] Url Rewriting et phpThumb URL Rewriting et .htaccess 17 Décembre 2009
Problème URL Rewriting complexe avec les dossiers rééls et les autres chemins [Résolu] URL Rewriting et .htaccess 16 Juin 2009
[résolu] Souci URL rewriting + redirection 301 URL Rewriting et .htaccess 10 Décembre 2008
[RESOLU] Probléme avec url rewriting URL Rewriting et .htaccess 27 Septembre 2008
[RESOLU]URL Rewriting de base chez 1and1 URL Rewriting et .htaccess 20 Septembre 2008
URL rewriting avec paramètres [RESOLU] URL Rewriting et .htaccess 11 Septembre 2008
[RESOLU] Redirection ou rewriting ? URL Rewriting et .htaccess 10 Septembre 2008
[Résolu] .htaccess en local (rewriting) Développement d'un site Web ou d'une appli mobile 11 Juillet 2008
[Résolu]URL Rewriting & OVH: certaines RewriteRule HS URL Rewriting et .htaccess 10 Mai 2008
[resolu]Petit coup d'oeil rapide sur rewriting? URL Rewriting et .htaccess 26 Mars 2008
[RESOLU] url rewriting et include capricieux URL Rewriting et .htaccess 17 Mars 2008
[Resolu] Probleme d'URL Rewriting avec variable texte URL Rewriting et .htaccess 4 Mars 2008
[Resolu] URL rewriting : "?" en trop URL Rewriting et .htaccess 21 Février 2008
[Résolu] Rewriting OVH problème avec un slash URL Rewriting et .htaccess 19 Février 2008