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 passage de paramètre en header


Sujet :

Apache

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut Réécriture d'URL et passage de paramètre en header
    Bonjour à tous,

    J'ai 2 serveurs

    1°) Frontal
    redhat + apache
    vhosts apache : mysite


    2°) Serveur d'application (machine2)
    redhat + tomcat
    l'application se trouve sur http://machine:8080/monrepertoire/start.jsp


    Au niveau appel client, j'ai un url du type
    http://mysite/start.jsp?id1=val1&id2=val2&id3=val3

    avec val1, val2, val3 sont des valeurs qui changent tout les temps

    Mon besoin c'est d'avoir la configuration de vhosts apache qui transforme http://mysite/start.jsp?id1=val1&id2=val2&id3=val3 en
    http://mysite/start.jsp?id2=val2&id3=val3 avec id1, val1 positionné header. En effet l'appli ne donne pas les résultats exactexactement que c'est on met id1 et val1 en header

    en ASP il y a une fonction response.addheader "id1", val1
    pour ajouter un header, avec val1 en paramètre, mais je ne connais pas en apache.

    J'ai utilisé le mode proxy standard pour l'appel de l'appli.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <VirtualHost mysite:80>
            ServerName mysite
     
    	ProxyPass / http://machine:8080/monrepertoire/
    	ProxyPassReverse / http://machine:8080/monrepertoire/
     
    </Virtualhost>
    Mais ce qui m'interesse surtout c'est comment je dois faire pour la réecruture d'url


    D'avance merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut
    J'ai pensé à utiliser cette réecriture, quand pensez-vous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <VirtualHost mysite:80>
            ServerName mysite
     
            RewriteEngine on
            RewriteRule ^start.jsp?id2=$2&id3=$3 start.jsp?id1=$1&id2=$2&id3=$3 [L]
            RequestHeader set id $1
     
                 ProxyPass / http://machine:8080/monrepertoire/
    	ProxyPassReverse / http://machine:8080/monrepertoire/
     
    </Virtualhost>
    En même temps, il se peut que l'appel arrivé soit http://mysite/start.jsp?id1=val1 aussi. Donc la rédirection c'est sera http://mysite/start.jsp seulement avec id1 et val1 passé en header. Comment doit modifier la réecriture pour qu'il prend en compte aussi que ce soit avec http://mysite/start.jsp?id1=val1&id2=val2&id3=val3 ou http://mysite/start.jsp?id1=val1 seulement?
    Merci

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut
    J'ai essayé celui-ci mais il ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
            RewriteRule ^/start.jsp?id1=([^/]+)&(.*) ^/start.jsp?$2 [E=user:$1]
     
            Header set id1 %{user}e
            RequestHeader set id1 %{user}e
    Est-ce que quelqu'un a une idée , svp ?

    Merci.

  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
    Je ne sais pas si mixer RewriteRule et ProxyXxx comme ça fonctionnera. Toujours est-il que ton RewriteRule est incorrect car par défaut, la query string ne fait pas partie des trucs qui sont passés au filtre du RewriteRule. Sur un RewriteRule, tu ne peux travailler que sur le chemin, donc /start.jsp. Pour la query string, il faut passer par une RewriteCond ou un premier RewriteRule qui va concaténer chemin et query string.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut
    Merci pour la réponse,

    ici il y a une petite explication entre le rewriterule + Proxy
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://mail-archives.apache.org/mod_mbox/httpd-users/200407.mbox/%3C7200DA42-D2C8-11D8-B329-00039310F722@dartmouth.edu%3E
    Mais je ne sais pas trop comment adapter à mon besoin...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut
    J'ai tésté le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            RewriteCond %{QUERY_STRING} ^id1=([^/]+)&id2=([^/]+)&id3=([^/]+)$
            RewriteRule start\.jsp /start.jsp?id2=%2&id3=%3 [L,R=301] [E=foo:%1]
     
     
            RewriteCond %{QUERY_STRING} ^id1=([^/]+)$
            RewriteRule start\.jsp /start.jsp [L,R=301] [E=foo:%1]
     
           Header set id1 %{foo}e
            RequestHeader set id1 %{foo}e
    Le premier fonctionne càd http://mysite/start.jsp?id1=val1&id2=val2&id3=val3 vers http://mysite/start.jsp?id2=val2&id3=val3
    par contre le second
    http://mysite/start.jsp?id1=val1 ne fonctionne pas car il boucle, en plus le variable "foo" n'est pas positionné

  7. #7
    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
    Pour ta deuxième réécriture, essaie en ajoutant un ? à ta redirection pour supprimer la query string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{QUERY_STRING} ^id1=([^/]+)$
    RewriteRule start\.jsp /start.jsp? [L,R=301] [E=foo:%1]

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut
    Merci, ça fonctionne avec le ?.
    Mais le variable en mode heade ça ne fonctionne pas toujours... Est-ce que tu a une idée ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut
    J'ai utilisé le technique suivant

    http://mysite/start.jsp?id1=val1&id2=val2&id3=val3 => http://mysite/toto/val1/val2/val3
    puis tout de suite après
    http://mysite/toto/val1/val2/val3 => http://mysite/start.jsp?id2=val2&id3=val3

    mais au niveau reponse j'ai http://mysite/start.jsp?id2=&id3=

    j'ai pas les valeurs attendus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    RewriteCond %{QUERY_STRING} ^id1=([^/]+)&id2=([^/]+)&id3=([^/]+)$
    RewriteRule start\.jsp /toto/%1/%2/%3 [R=301]
    RewriteRule ^/toto/([^/]+)/([^/]+)/([^/]+) /start.jsp?id2=%2&id3=%3 [L,R=301] [E=foo:$1]
     
     RequestHeader set id1 ${foo}e
    Help please

  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
    Ce n'est pas possible de factoriser une RewriteCond, donc dans ta seconde RewriteRule, les %2 et %3 ne valent rien, d'où ce que tu observes sur la seconde redirection.

    Après, je ne vois pas l'intérêt de définir une variable d'environnement par une RewriteRule sur laquelle tu demandes une redirection du navigateur. Au mieux, ton en-tête en envoyé au navigateur mais dans tous les cas, le navigateur ne le renverra pas au serveur.

    Je vais jouer au mec pénible : tu peux résumer de nouveau ton besoin en précisant les séquences des redirections ? Dans ton premier message, tu ne parles pas particulièrement d'une redirection du navigateur mais dans tes derniers essais, tu en fais, alors j'ai un peu de mal à suivre

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut
    Tout d'abord, merci pour ton aide.

    Le besoin c'est :
    http://mysite/start.jsp?id1=val1&id2=val2&id3=val3 ==>> http://mysite/start.jsp?id2=val2&id3=val3 et metre en header id et val1

    http://mysite/start.jsp?id1=val1 ==> http://mysite/start.jsp et metre en header id et val1

    C'est l'appli qui en demande la mise en header comme ça. C'est plutôt requestheader id1 {%foo}e, car le header ne fonctionne pas.
    Concernant les derniers essaies, c'est juste une tentation comme les autres mais le besoin initial c'est toujours celui qui décrit ci-dessus.

  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
    C'est grave si id1=val1 figure toujours dans l'URL ? Car on peut imaginer le mécanisme qui consiste à créer l'en-tête id1 dès qu'on trouve id1= dans la query string sans chercher à corriger la query string. Ca se ferait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteCond %{QUERY_STRING} id1=([^&]+)
    RewriteRule .* - [E=id1:%1,L]
     
    RequestHeader set id1 %{id1}e env=id1
    PAS TESTE !!
    Le seul truc c'est que le filtre du RewriteCond n'est pas assez restrictif car un paramètre d'URL totoid1=... passera aussi.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut
    Avec ce code j'ai :

    http://mysite/start.jsp?id1=val1&id2=val2&id3=val3 => http://mysite/start.jsp?id1=val1&id2=val2&id3=val3

    http://mysite/start.jsp?id1=val1 => http://mysite/start.jsp?id1=val1

    C'est à dire rien a été modifié....

    Sinon, pour mon information ça veut dire quoi le "env=id1" sur RequestHeader.

  14. #14
    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
    A ton avis, pourquoi est-ce que je demandais Peut-être mais est-ce que "c'est grave si id1=val1 figure toujours dans l'URL" ? J'ai cru comprendre que l'important était que l'en-tête soir ajouté par mod_proxy dans la requête qu'il pousse à Tomcat. Dans ta réponse précédente, tu n'étais pas clair sur le fait qu'il faille faire une redirection du navigateur. Vu que ça a l'air de t'inquiéter, j'imagine qu'il faut que le navigateur affiche une autre URL mais si c'est le cas, tu perds le id1 dans la query string et donc Apache ne peut plus construire l'en-tête qui va bien

    Citation Envoyé par kalibo1 Voir le message
    Sinon, pour mon information ça veut dire quoi le "env=id1" sur RequestHeader.
    Cf. la doc Apache

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut
    Quelque chose bizarre,

    Quand je mets en "dur" la valeur de la variable, mon appli fonctionne
    c-à-d
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    RewriteCond %{QUERY_STRING} id1=([^&]+)
    RewriteRule .* - [E=id1:%1,L]
    #Je mets en commentaire
    #RequestHeader set id1 %{id1}e env=id1 
    RequestHeader set id1 val1

    Mais avec le code ci-dessous, il fonctionne pas ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{QUERY_STRING} id1=([^&]+)
    RewriteRule .* - [E=id1:%1,L]
    RequestHeader set id1 %{id1}e env=id1

    il fonctionne pas ???

  16. #16
    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 m'en doutais un peu. Essaie d'ajouter le flag PT dans la RewriteRule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{QUERY_STRING} id1=([^&]+)
    RewriteRule .* - [E=id1:%1,PT,L]
    Ca doit venir que RequestHeader est traité avant RewriteRule donc la variable d'environnement est vide au moment où Apache en a besoin.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut
    c'est pareil ... il ne fonctionne pas ....

    Mais ceci-dit, le vrai besoin c'est de l'enlever "id1=val1" sur l'url.
    Encore merci pour ton aide sur ce sujet..

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut
    J'ai une idée suivante...

    On utilise ton code d'abord, avec la modif qu'il faut à appliquer pour qu'il fonctionne correctement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    RewriteCond %{QUERY_STRING} id1=([^&]+)
    RewriteRule .* - [E=id1:%1,PT,L]
    RequestHeader set id1 %{id1}e env=id1
    Comme ça j'aurai le résultat suivant http://mysite/start.jsp?id1=val1&id2=val2&id3=val3 avec le id1 et val en requestheader.

    Puis rajouter le script suivant en dessous, pour supprimer "id1=val1"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       RewriteCond %{QUERY_STRING} ^id1=([^/]+)&id2=([^/]+)&id3=([^/]+)$
         RewriteRule start\.jsp /start.jsp?id2=%2&id3=%3 [L,R=301]

    et on fait pareil aussi pour la deuxième URL http://mysite/start.jsp?id1=val1

    mais malhereusement quand
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    RewriteCond %{QUERY_STRING} id1=([^&]+)
    RewriteRule .* - [E=id1:%1,PT,L]
     
    #J'ai mis le variable en dur
    RequestHeader set id1 val1
     
    RewriteCond %{QUERY_STRING} ^id1=([^/]+)&id2=([^/]+)&id3=([^/]+)$
    RewriteRule start\.jsp /start.jsp?id2=%2&id3=%3 [L,R=301]
    L'appli fonctionne mais avec comme url http://mysite/start.jsp?id1=val1&id2=val2&id3=val3... ce que je ne veux pas

  19. #19
    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
    Dans ce que tu donnes, les 2 premiers RewriteXxx ne servent à rien. On peut donc les retirer. Tu es en train de dire que la seule règle suivante ne fonctionne pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteCond %{QUERY_STRING} ^id1=([^/]+)&id2=([^/]+)&id3=([^/]+)$
    RewriteRule start\.jsp /start.jsp?id2=%2&id3=%3 [L,R=301]
    Si tu ne mets que ça comme configuration, qu'est ce que ça donne ? Où mets-tu toutes ces règles ? Dans le bloc <VirtualHost> ou dans un .htaccess ? Peux-tu donner l'intégralité de cette configuration (bloc VH ou .htaccess) ?

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Points : 13
    Points
    13
    Par défaut
    voilà

    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
     
    <VirtualHost mysite:80>
            ServerName mysite
     
            RewriteEngine on
            RewriteLog /rewrite.log
            RewriteLogLevel 0
     
            RewriteCond %{QUERY_STRING} ^id1=([^/]+)&id2=([^/]+)&id3=([^/]+)$
            RewriteRule start\.jsp /start.jsp?id2=%2&id3=%3 [L,R=301] 
     
            RewriteCond %{QUERY_STRING} ^id1=([^/]+)$
            RewriteRule start\.jsp /start.jsp? [L,R=301]
     
             ProxyPass / http://machine:8080/monrepertoire/
             ProxyPassReverse / http://machine:8080/monrepertoire/
     
    </Virtualhost>
    avec ça ... les urls sont biens réecrits
    http://mysite/start.jsp?id1=val1&id2=val2&id3=val3 ==> http://mysite/start.jsp?&id2=val2&id3=val3
    http://mysite/start.jsp?id1=val1 ==> http://mysite/start.jsp
    mais la variable id1 et val1 n'est pas en header car je ne sais pas comment le récupérer : Résultat , l'appli ne fonctionne pas...

    Mais dès que j'ai mis en dûr RequestHeader set id1 val1, les url sont réecrits + variable positionné en requestheader donc appli 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
    16
    17
    18
    19
    20
     
    <VirtualHost mysite:80>
            ServerName mysite
     
            RewriteEngine on
            RewriteLog /rewrite.log
            RewriteLogLevel 0
     
            RewriteCond %{QUERY_STRING} ^id1=([^/]+)&id2=([^/]+)&id3=([^/]+)$
            RewriteRule start\.jsp /start.jsp?id2=%2&id3=%3 [L,R=301] 
     
            RewriteCond %{QUERY_STRING} ^id1=([^/]+)$
            RewriteRule start\.jsp /start.jsp? [L,R=301]
     
           RequestHeader set id1 val1
     
           ProxyPass / http://machine:8080/monrepertoire/
             ProxyPassReverse / http://machine:8080/monrepertoire/
     
    </Virtualhost>

    si je mets le dernier 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
     
    <VirtualHost mysite:80>
            ServerName mysite
     
            RewriteEngine on
            RewriteLog //rewrite.log
            RewriteLogLevel 0
     
            RewriteCond %{QUERY_STRING} ^id1=([^/]+)$
            RewriteRule start\.jsp /start.jsp? [L,R=301]
            RequestHeader set id1 %{id1}e env=id1
     
             ProxyPass / http://machine:8080/monrepertoire/
             ProxyPassReverse / http://machine:8080/monrepertoire/
     
    </Virtualhost>
    Les urls ne sont pas ré-ecrits, la variable n'est pas positionné....

Discussions similaires

  1. Passage de paramètre dans Header(location)
    Par dekalima dans le forum Langage
    Réponses: 3
    Dernier message: 21/01/2011, 09h36
  2. [URL Rewriting] passage de paramètres
    Par megacool dans le forum Apache
    Réponses: 2
    Dernier message: 02/07/2008, 17h09
  3. Passage de paramètres en url qui marche pas
    Par debilemaniac dans le forum Langage
    Réponses: 9
    Dernier message: 30/05/2006, 16h29
  4. Pb passage de paramétres via l'url
    Par chpog dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/09/2005, 10h34
  5. Passage de paramètres via l'URL
    Par carolinebelle dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 02/08/2005, 16h16

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