IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Réécriture d'url et pagination


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Par défaut Réécriture d'url et pagination
    Bonjour à tous,

    Je voudrais faire une réécriture sur une pagination.
    ex. page de la categorie /ampoule
    page 2 de la categorie /halogenes-ampoule
    page 3 de la categorie /nanotubes-ampoule
    page 4 de la categorie /fluorescentes-ampoule
    page 5 à ... de la categorie /luminescente-ampoule-N

    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    #pagination 2
    RewriteRule ^halogenes-(.*)$ /categorie.php?categorie=$1&page=2 [L]
     
    #pagination 3
    RewriteRule ^nanotubes-(.*)$ /categorie.php?categorie=$1&page=3 [L]
     
    #pagination 4
    RewriteRule ^fluorescentes-(.*)$ /categorie.php?categorie=$1&page=4 [L]
     
    #pagination de 5 à ...
    RewriteRule ^luminescente-(.*)-([0-9]+)$ /categorie.php?categorie=$1&page=$2 [L]
     
    RewriteCond %{REQUEST_URI} !^/$
    RewriteCond %{REQUEST_URI} !^/(halogenes|nanotubes|fluorescentes|luminescente)(.*)$
    RewriteRule ^(.*)$ /categorie.php?categorie=$1
    Apparemment, la dernière ligne fait une boucle, mais je ne trouve pas de solution.

    Y a t-il une erreur dans ma réécriture ?

    Merci,

    Joce

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    La dernière règle doit exclure categorie.php et non les autres (elles ont déjà été réécrites en categorie.php).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{REQUEST_URI} !^/$
    RewriteCond %{REQUEST_URI} !^/(halogenes|nanotubes|fluorescentes|luminescente)(.*)$
    RewriteRule ^(.*)$ /categorie.php?categorie=$1
    Devrait plutôt être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{REQUEST_URI} !=/
    RewriteCond %{REQUEST_URI} !=/categorie.php
    RewriteRule ^(.*)$ /categorie.php?categorie=$1 [L]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Par défaut
    Bonjour Julp et merci pour ta réponse.

    J'ai testé, j'ai toujours cette boucle.
    C'est vraiment la dernière ligne qui ne va pas, quand je la commente tout fonctionne bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteRule ^(.*)$ /categorie.php?categorie=$1 [L]
    Dis-moi, je vois que ta syntaxe pour dire est différent "!=/"
    n'est pas la même que la mienne "!^/$"

    Les 2 sont bonnes ??

    Bonne Soirée,

    Joce

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Vous avez testé quoi précisément ? Une chose est sure, sans l'exclusion préalable de categorie.php (par RewriteCond ou une règle de non réécriture flagguée L(ast) avant) vous aurez cette boucle. Or vous nous redonnez la règle sans aucune tentative d'exclusion ...

    Par contre, désolé, je n'avais pas fait gaffe plus haut, il ne faut pas de [OR]

    Citation Envoyé par JoceC Voir le message
    Dis-moi, je vois que ta syntaxe pour dire est différent "!=/"
    n'est pas la même que la mienne "!^/$"

    Les 2 sont bonnes ??
    Dans ce cas, oui :
    Citation Envoyé par Documentation
    '=CondPattern' (lexicographically equal)
    Treats the CondPattern as a plain string and compares it lexicographically to TestString. True if TestString is lexicographically equal to CondPattern (the two strings are exactly equal, character for character). If CondPattern is "" (two quotation marks) this compares TestString to the empty string.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Par défaut
    C'est moi qui ai dit une bêtise, ça fonctionne ;-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #pagination 2
    RewriteRule ^halogenes-(.*)$ /categorie.php?categorie=$1&page=2 [L]
     
    #pagination 3
    RewriteRule ^nanotubes-(.*)$ /categorie.php?categorie=$1&page=3 [L]
     
    #pagination 4
    RewriteRule ^fluorescentes-(.*)$ /categorie.php?categorie=$1&page=4 [L]
     
    #pagination de 5 à ...
    RewriteRule ^luminescente-(.*)-([0-9]+)$ /categorie.php?categorie=$1&page=$2 [L]
     
    RewriteCond %{REQUEST_URI} !=/
    RewriteCond %{REQUEST_URI} !=/categorie.php
    RewriteRule ^(.*)$ /categorie.php?categorie=$1 [L]
    C'est possible d'avoir une explication sur les dernières règles

    La dernière règle doit exclure categorie.php et non les autres (elles ont déjà été réécrites en categorie.php).
    Ca veut dire quoi exactement ?

    Si j'ajoute d'autres règles (sur d'autres URL), il faudra toujours que cette règle soit en dernier, je suppose !?

    Merci,

    Joce

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # Si la ressource demandée n'est pas (exactement) "/" (le chemin de l'URL)
    RewriteCond %{REQUEST_URI} !=/
    # ET n'est pas (exactement) "/categorie.php"
    RewriteCond %{REQUEST_URI} !=/categorie.php
    # Alors renvoi sur categorie.php
    RewriteRule ^(.*)$ /categorie.php?categorie=$1 [L]
    Citation Envoyé par JoceC Voir le message
    La dernière règle doit exclure categorie.php et non les autres (elles ont déjà été réécrites en categorie.php).
    Ca veut dire quoi exactement ?
    Si on prend l'exemple d'une URL en http://mondomaine.fr/halogenes-X :
    1. Apache trouve la règle ^halogenes-(.*)$ => /categorie.php?categorie=$1&page=2 [L]
    2. Celle-ci étant flagguée L(ast), Apache arrête la lecture du fichier .htaccess de suite, donc ne cherche pas à savoir si d'autres règles peuvent s'appliquer
    3. La réécriture conduit à la "transformation" de la requête /halogenes-X en /categorie.php?categorie=X&page=2
    4. Apache reprend le fichier .htaccess pour déterminer si /categorie.php(?categorie=X&page=2) peut/doit être réécrit

    C'est dans cette dernière étape, vu qu'Apache reconsidère la requête de zéro, qu'il y aurait eu, sans cette exclusion de /categorie.php pour la dernière règle, une boucle infinie (/categorie.php?categorie=X&page=2 => /categorie.php?categorie=categorie.php&categorie=X&page=2, puis /categorie.php?categorie=categorie.php&categorie=X&page=2 => /categorie.php?categorie=categorie.php&categorie=categorie.php&categorie=X&page=2 et ainsi de suite).

    Rappel : RewriteRule ne considère uniquement la partie chemin HTTP d'une URL. Pour tout le reste (query string comprise), il faut passer par RewriteCond.

    Citation Envoyé par JoceC Voir le message
    Si j'ajoute d'autres règles (sur d'autres URL), il faudra toujours que cette règle soit en dernier, je suppose !?
    Oui mais ça n'aurait rien à avoir avec la boucle infinie. C'est uniquement en rapport au motif et à sa généricité. En effet, si vous ajoutiez, après celle-ci, une règle a => b (par exemple), elle ne serait jamais appliquée à cause du .* avant (règle "ramasse-miettes" ayant signification de "tout") ou éventuellement faussée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réécriture d'URL pour une pagination
    Par sliverman dans le forum Apache
    Réponses: 1
    Dernier message: 20/06/2010, 22h33
  2. Réécriture d'url dans fichier ASP
    Par Ishizaki dans le forum ASP
    Réponses: 1
    Dernier message: 22/02/2007, 11h44
  3. ASP + Access, réécriture d'URL
    Par duchesnef dans le forum ASP
    Réponses: 5
    Dernier message: 14/09/2006, 09h54
  4. La réécriture d'URL avec Apache
    Par agencep dans le forum Langage
    Réponses: 3
    Dernier message: 25/04/2006, 16h37
  5. Réécriture d'url en asp.
    Par éelise dans le forum ASP
    Réponses: 4
    Dernier message: 13/12/2005, 08h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo