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

Vue hybride

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    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 averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    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 averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    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
    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 averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    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 averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    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
    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 averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    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é....

  9. #9
    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
    Par défaut
    Citation Envoyé par kalibo1 Voir le message
    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...
    C'est ce que je dis depuis un moment, le gros du problème est là : si tu rediriges le navigateur sur une URL qui ne contient pas id1 dans la query string, Apache ne peut pas récupérer la valeur sur la redirection. J'explique dans le détail ce qu'il se passe :
    1. Le navigateur demande à Apache l'URL http://mysite/start.jsp?id1=val1&id2=val2&id3=val3
    2. Avec tes règles, Apache voit qu'il y a id1 dans la query string donc redirige le navigateur. Tu peux mettre ici un RequestHeader à cet endroit mais il ne sert à rien car Apache ne pousse pas la requête vers Tomcat, il fait juste une redirection du navigateur.
    3. Le navigateur reçoit un ordre de redirection sur http://mysite/start.jsp?id2=val2&id3=val3 donc il demande cette URL à Apache
    4. Apache ne trouve pas id1 dans la query string donc n'a pas de valeur à positionner pour l'en-tête. Il passe la requête à l'autre serveur (Tomcat).


    Donc même si on a un code qui sait récupérer id1 de la query string et positionner l'en-tête, tant que tu feras une redirection du navigateur, tu n'y arriveras pas.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut
    si tu rediriges le navigateur sur une URL qui ne contient pas id1 dans la query string, Apache ne peut pas récupérer la valeur sur la redirection.
    Et si on ne mets pas au niveau query_string, càd, si on change le besoin comme ça

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

    avec toujours val1 positionné en requestheader. Est-ce que c'est jouable?

  11. #11
    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
    Par défaut
    C'est envisageable. Mais on peut aussi utiliser les cookies. Je ne sais pas quelle est la nature de la confidentialité de id1 mais on peut tenter de mettre la valeur de id1 dans un cookie quand on trouve id1 en paramètre d'URL et qui sera envoyé par le navigateur à chaque requête qu'il fera sur le serveur.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut
    Merci "_Mac_"
    C'est l'appli qui demande le fonctionnement en requestheader mais pas en cookie .


    Sinon, J'ai tenté de faire ceci mais il ne fonctionne pas..

    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
    21
    <VirtualHost mysite:80>
            ServerName mysite
     
            RewriteEngine on
            RewriteLog /rewrite.log
            RewriteLogLevel 0
     
            #http://mysite/val1 ==> http://mysite/start.jsp
    	RewriteRule ^([^/]+)$ /start.jsp [L,R=301] [E=foo:%1]
    	RequestHeader set id1 %{foo}e env=foo
     
     
            # http://mysite/val1?id2=val2&id3=val3 ==> http://mysite/start.jsp?&id2=val2&id3=val3 
    	RewriteRule ^([^/]+)?([^/]+)$ /start.jsp?%2 [L,R=301] [E=foo:%1]
    	RequestHeader set id1 %{foo}e env=foo
     
     
            ProxyPass / http://machine:8080/monrepertoire/
            ProxyPassReverse / http://machine:8080/monrepertoire/
     
    </Virtualhost>
    Quelqu'un peut-il me donner la correction?

  13. #13
    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
    Par défaut
    Je vais le répéter encore une fois : si ton navigateur ne renvoie pas id1 d'une requête sur l'autre (sous forme de cookie, chemin d'URL ou de paramètre d'URL, peu importe), notamment à cause d'une redirection (flag R), Apache perd cette information et ne peut pas deviner ou retrouver la valeur de id1 donc l'en-tête est vide. Tu peux retourner le problème dans tous les sens, tu n'as pas le choix : il faut nécessairement que ton navigateur envoie id1 avec chaque requête qui nécessite cet en-tête pour fonctionner, soit dans un cookie, soit dans le chemin de l'URL, soit dans un paramètre d'URL.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut
    En gros mon besoin n'est pas réalisable

    Sinon, est-ce qu'il n'y a pas d'autre moyen de re-ecrire le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            RewriteRule ^/id1/([^/]+)/(.*) /$2 [E=foo:$1,R]
            RequestHeader add "id1" "%{foo}e"
    mais en utilisant autre flag que R ?

    pour avoir

  15. #15
    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
    Par défaut
    Je n'ai jamais dit ça : je pense que c'est faisable avec des cookies. A mon avis, c'est la piste que tu devrais suivre. Relis mes messages sur le sujet.

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