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 :

[URL Rewriting] Réécrire le chemin pour la partie query string


Sujet :

Apache

  1. #1
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut [URL Rewriting] Réécrire le chemin pour la partie query string
    Bonjour à tous,

    Je suis nul en expression régulière, et je cherche à faire ça dans un htaccess pour de la réécriture d'url :

    transformer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://ssDomaine.domaine.com/mafonction?param1=val1&param2=val2
    en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://ssDomaine.domaine.com/index.php?function=mafonction&param1=val1&param2=val2
    sachant que le nombre de paramètres est variable...

    Vous avez une idée ?

    Merci pour tous les tuyaux.
    C'est curieux chez les marins ce besoin de faire des phrases !

  2. #2
    Expert éminent sénior

    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
    Points : 17 778
    Points
    17 778
    Par défaut
    Plus ou moins quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([^.]+)$ index.php?function=$1 [QSA]


    L'option QSA étant importante puisqu'elle retransmettra les variables de l'URL (query string) lors de la réécriture (sinon elle ne le ferait pas ici puisqu'on y touche en ajoutant le paramètre function).

  3. #3
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Super, merci ça marche impeccable.
    Il va vraiment falloir que je me mette un jour aux expressions régulières
    C'est curieux chez les marins ce besoin de faire des phrases !

  4. #4
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Bonjour,

    Je fais face à une nouvelle difficulté : ça marche bien quand tout est en GET.
    Maintenant, je dois autoriser les requêtes de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://ssDomaine.domaine.com/mafonction
    et l'envoi en même temps des paramètres en POST

    pour transformer en url :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://ssDomaine.domaine.com/index.php
    et recevoir le reste en POST :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $_POST=array{
    "fonction" => mafonction, //récupéré de l'url
    "param2" => $_POST['param2'],
    ...
    }
    Avec mon htaccess, il semble que je ne peux pas récupérer les POST...

    Merci d'avance si vous avez une solution.
    C'est curieux chez les marins ce besoin de faire des phrases !

  5. #5
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Pour faire plus simple, comment dans un htaccess :

    1. quelle que soit la méthode (get/post) transformer en post
    2. transformer la page appelée (qui est en fait /mafonction) en $_POST
    3. rediriger tout ça vers index.php avec les paramètres post, car je perds mes $_post dans la redirection...


    Voilà, pour moi c'est un vrai casse tête...

    Merci...
    C'est curieux chez les marins ce besoin de faire des phrases !

  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
    Tu peux pas "transformer en POST" : la réécriture d'URL ça modifie l'URL reçue par Apache, quelque soit le verbe HTTP utilisé avec (GET, POST, PUT, etc.). Une fois qu'Apache a construit l'URL finale, il passe la main au module qui doit gérer cette URL et c'est tout.

    Donc, pour revenir à ton cas, on ne peut pas ajouter des paramètres de POST. Mais ceci dit, c'est pas forcément grave : tu peux utiliser $_REQUEST à la place de $_POST, comme ça, tu auras tous tes paramètres, ou encore écrire une finction "get_param" qui va chercher les paramètres dans $_GET et $_POST (c'est ce que je fais, personnellement).

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  7. #7
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Merci pour ta réponse,

    le souci, c'est qu'après la redirection, $_REQUEST ne me renvoie plus rien...
    L'affichage d'un phpinfo() me montre que je n'ai plus de paramètres.
    Et ma solution est obligée de passer par l'url rewriting...

    J'ai mis une solution de rechange un peu lourde: mettre physiquement sur le projet des fichiers nommés comme chaque fonction (maFonction.php), qui ont tous le même code (include("maPageDeTraitement.php")), et j'ai retiré l'url rewriting... Ca me permet de garder tous les paramètres et de faire un traitement php... Et le client dans l'appel n'a qu'à rajouter l'extension php...
    C'est pas terrible, mais ça dépanne pour l'instant
    C'est curieux chez les marins ce besoin de faire des phrases !

  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
    Quelle redirection ? Normalement, tu ne devrais pas avoir de redirection, ça doit être transparent Tu a mis quoi, exactement, dans ton .htaccess ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  9. #9
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Initialement je ne devais gérer que du GET.
    Maintenant, les paramètres sont si lourds (5000 caractères ou plus) que je dois gérer en plus le POST
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RewriteEngine on
    RewriteRule ^([^.]+)$ index.php?function=$1 [QSA]
    C'est curieux chez les marins ce besoin de faire des phrases !

  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
    Ca fait vraiment une redirection côté client (navigateur) ? C'est plutôt curieux Je vais essayer de faire un test, on verra.

    EDIT : résultat des tests : j'ai fait 2 petits fichiers :
    test.hml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <html>
    <body>
    <form action="mafonction" method="post">
    	<textarea name="texte"></textarea>
    	<input type="submit">
    </form>
    </body>
    </html>
    test2.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <html>
    <body>
    <pre>
    GET :
    <?php print_r($_GET); ?>
     
    POST :
    <?php print_r($_POST); ?>
     
    REQUEST :
    <?php print_r($_REQUEST); ?>
    </pre>
    </body>
    </html>
    .htaccess :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteEngine on
    RewriteRule ^([^.]+)$ test2.php?function=$1 [QSA]
    Résultat, quand je mets 3 bêtises dans mon formulaire et que je l'envoie, il n'y a pas de redirection côté client et j'obtiens ceci :
    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
    18
    GET :
    Array
    (
        [function] => mafonction
    )
     
    POST :
    Array
    (
        [texte] => titi toto
    )
     
    REQUEST :
    Array
    (
        [function] => mafonction
        [texte] => titi toto
    )
    Donc pour moi, tout roule

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  11. #11
    Membre actif Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Points : 258
    Points
    258
    Par défaut
    Il n'y a effectivement pas de redirection côté client.

    C'est bizarre qu'avec un même fichier htaccess, tu récupères des paramètres et moi pas...

    Je refais les tests avec tes fichiers, je suis plutôt du genre tétu, il va donc bien falloir que ça roule aussi de mon côté
    C'est curieux chez les marins ce besoin de faire des phrases !

  12. #12
    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 renaudjuif Voir le message
    Je refais les tests avec tes fichiers, je suis plutôt du genre tétu, il va donc bien falloir que ça roule aussi de mon côté
    C'est pas une question d'être têtu ou pas, c'est simplement que ce n'est pas normal que ça ne marche pas

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/07/2009, 05h08
  2. Réponses: 3
    Dernier message: 08/03/2009, 11h58
  3. [URL Rewriting] Besoin d'aide pour règle un peu longue
    Par yvon_huynh dans le forum Apache
    Réponses: 5
    Dernier message: 23/06/2008, 13h12
  4. Réponses: 7
    Dernier message: 20/12/2007, 12h52
  5. [Url Rewriting] Réécrire la partie query string
    Par 7studio dans le forum Apache
    Réponses: 5
    Dernier message: 23/11/2007, 16h55

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