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 sur plusieurs paramètres


Sujet :

Apache

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut Réécriture d'url sur plusieurs paramètres
    Bonjour,

    J'ai des pages qui sont paramétrées en temps normal de cette façon là (index.php?page=xx). Via l'Url Rewriting j'ai pu les appeler comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $pages=array(
    	'home'=>'home.php',
    	'sports'=>'sports.php'
    );
    if(isset($_GET['page']) && !array_key_exists($_GET['page'],$pages)) {
    	include 'error.php';
    } else if(isset($_GET['page']) && array_key_exists($_GET['page'],$pages)) {
    	include $pages[$_GET['page']];
    } else {
    	include 'home.php';
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="sports">Sports</a>
    Le .htaccess que j'utilise étant comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Options +FollowSymlinks -Indexes -MultiViews
    RewriteEngine On
    RewriteRule ^([a-z]+)$ index.php?page=$1 [L,QSA]
    Je n'arrive pas à faire en sorte que je puisse appeler une page ayant un deuxième paramètre, du genre index.php?page=xx&id=nn.
    J'ai bien tenté de rajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]+)$ index.php?page=$1&id=$2 [L,QSA]
    Mais sans succès !! Une idée ? Merci d'avance, bon dimanche.

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par nicolas2603 Voir le message
    J'ai bien tenté de rajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]+)$ index.php?page=$1&id=$2 [L,QSA]
    Le $2 est censé correspondre à quoi dans l'URL ? Sa valeur sort d'où ?

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    C'est sensé être une variable qui est un paramètre de requête SQL, mais qui normalement ne doit pas intervenir sur l'URL. Mais je ne sais pas comment construire mon URL pour que la page soit appelée, comme si je faisais ça en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="index.php?page=sport">Sports</a>
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="sport">Sports</a>
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="index.php?page=sport&id=5">Sports</a>
    devient quoi ?

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est bien le problème : si on ne trouve pas l'information id=5 dans l'url (sous n'importe quelle forme), comment Apache en devine la valeur ? On peut la coder dans le .htaccess mais dans ce cas ce sera toujours la même valeur ou bien il faudra ajouter une règle pour chaque valeur.

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Oui j'ai bien compris ça, j'ai donc essayé de faire une url de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="sport-5">Sports</a>
    avec un .htaccess comme précédemment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]+)-([0-9])$ /index.php?page=$1&id=$2 [L,QSA]
    Mais ça n'a pas fonctionné ! Il me manque un élément, je sais, mais impossible à comprendre quoi...

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par nicolas2603 Voir le message
    Mais ça n'a pas fonctionné !
    Quel a été le résultat obtenu, exactement ? Quelle URL exacte as-tu utilisée pour ce test ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    J'ai utilisé cette URL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="sports-5">Sports</a>
    Et j'ai été redirigé vers la page error.php, celle qui est appelée lorsqu'un paramètre de page est passé mais que le page n'existe pas.

  8. #8
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Je ne vois pas pourquoi ça ne marche pas : la règle est correcte. Je soupçonne un conflit avec une autre règle. Tu peux donner le .htaccess en entier, s'il te plaît ?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Alors voici mon .htaccess:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Options -Indexes
     
    # URL rewriting
    Options +FollowSymlinks
    RewriteEngine On
    # RewriteRule ^([a-z]+)$ index.php?page=$1 [L]
    RewriteRule ^([a-z]+)-([0-9])$ index.php?page=$1&id=$2 [L]
     
    # Page d'erreur personnalisée
    ErrorDocument 403 http://localhost/monsite/adm/error
    ErrorDocument 404 http://localhost/monsite/adm/error
    Voici mon fichier css de liaison entre le fichier et le paramètre "page":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $pages=array(
    	'home'=>'home.php',
    	'sports'=>'user_gallery.php',
    	'error'=>'error.php'
    );
    if(isset($_GET['page']) && !array_key_exists($_GET['page'],$pages)) {
    	include 'error.php';
    } else if(isset($_GET['page']) && array_key_exists($_GET['page'],$pages)) {
    	include $pages[$_GET['page']];
    } else {
    	include 'home.php';
    } ?>
    Et voici le lien tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="sports-56">lien</a>
    Sauf que, du coup je suis redirigé vers la page error quel que soit le lien. Et je viens de me rendre compte d'un truc, c'est que là je suis dans un dossier d'administration, et dans le site même j'ai aussi un .htaccess. Ca peut se télescoper ?

  10. #10
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    S'il n'y a pas d'erreur de copier-coller, l'erreur vient que le lien que tu testes est sports-56 ("56" : 2 chiffres) alors que l'expression régulière du filtre est ^([a-z]+)-([0-9])$ qui suppose que l'URL se termine par - suivi d'un seul chiffre. Il manque juste un + :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]+)-([0-9]+)$ index.php?page=$1&id=$2 [L]

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Il n'y avait pas d'erreur de copié-collé, j'ai donc rajouté le +.
    Et je me suis rendu compte que certaines url contenaient des chiffres ET des lettres !! Héhé, le boulet !! Du coup j'ai modifié comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([a-z]+)-([a-z0-9]+)$ index.php?page=$1&id=$2 [L]
    Et là, ça fonctionne !! Merci pour ton aide, je commence à comprendre le fonctionnement !

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

Discussions similaires

  1. [osCommerce][2.3] Réécriture d'URL
    Par lonyc dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 27/12/2010, 09h16
  2. Comment trier un Hash sur plusieurs paramètres ?
    Par Whaouu dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2008, 09h31
  3. [PHP-JS] Modifier un paramètre de l'URL «sur le retour»
    Par Oscar Hiboux dans le forum Langage
    Réponses: 4
    Dernier message: 28/02/2007, 15h39
  4. Passer paramètres d'un formulaire sur plusieurs JSP
    Par itr dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 02/05/2006, 17h42
  5. [CR] Groupement dynamique sur plusieurs champs paramètrés
    Par CDRIK dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 07/06/2004, 17h55

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