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 rewrite puis proxypass


Sujet :

Apache

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Par défaut url rewrite puis proxypass
    Bonjour,

    Cela fait pas mal de temps que je suis les divers discussions de Developpez sans n'avoir posté un seul message, mais là je ne trouve pas la solution à mon problème...

    Situation :
    J'ai un serveur Apache2 sous Gentoo, celui-ci se charge de faire la passerelle avec un serveur Tomcat6. J'utilise mod_proxy pour atteindre le serveur Tomcat. Jusque là tout va bien. Maintenant je désirai faire de l'URL rewriting.

    Mon application Tomcat charge la page désirée en checkant les paramètres (ex: ?page=page_probleme).

    Objectif :
    L'objectif est, lorsque que je tape une URL genre www.monsite.com/probleme, de me renvoyer la page ?page=page_probleme qui se trouve sur mon Tomcat.

    Actuellement voici à quoi ressemble mon virtalHost :

    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
     
    <VirtualHost *:80>
     
      ServerAdmin root@monsite.com
      ServerName monsite.com
      ServerAlias www.monsite.com
     
      RewriteEngine on
      RewriteRule (.*) $1 [PT,E=my_env_var:1]
     
      ProxyPass / http://192.168.1.11:8080/myApp?page=page_
      ProxyPassReverse / http://192.168.1.11:8080/myApp?page=page_
     
      ErrorLog /var/log/apache2/monsite.com-error_log
      CustomLog /var/log/apache2/monsite.com-access_log combined
     
    </VirtualHost>
    Lorsque je vais sur l'url http://www.monsite.com/probleme, j'ai l'erruer suivante qui se produit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    HTTP Status 404 - /myApp%3Fpage=page_probleme
     
    type Status report
     
    message /myApp%3Fpage=page_problem
     
    description The requested resource (/myApp%3Fpage=page_problem) is not available.
    Apache Tomcat/6.0.20
    Quand je vais sur cette URL depuis mon serveur Tomcat (http://192.168.1.11:8080/myApp?page=page_probleme) tout fonctionne.

    Merci d'avance pour votre aide !!

  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
    Par défaut
    Tu ne peux pas faire ce genre de chose avec ProxyPass, il faut utiliser mod_rewrite à la place. En gros, remplace tes ProxyXxx par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteEngine on
    RewriteRule /(.*)^ http://192.168.1.11:8080/myApp?page=page_$1 [P]
    Le souci c'est si tu as des images : là, absolument tout sera passé en paramètres pages_xxx. Il faut donc ajouter des règles spécifiques et des conditions pour les images et les autres trucs qui ne doivent pas passer par page=...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Par défaut
    Super merci beaucoup pour ta réponse rapide ! Je vais essayer ça tout de suite.

    Et c'est vrai que je n'avais pas du pensé que les images pourraient posées problème ! Je vois le problème... Par contre quel genre d'erreurs produit cette expression ?? J'ai déjà eu pas mal d'erreurs de FireFox me disant que la redirection ne pouvait pas se terminer (redirige en boucle ??). Est-ce que ça viendrait de là ???

    Edit : Je m'excuse d'avance, je suis vraiment pas au point avec Apache... Donc j'ai effectué les modifications que tu m'as donné. Cependant j'ai une nouvelle erreur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Forbidden
     
    You don't have permission to access / on this server.
    Apache Server at www.mysite.com Port 80
    Et dans les logs Apache :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [Tue Oct 06 15:19:33 2009] [error] [client 192.168.3.1] client denied by server configuration: /usr/htdocs
    Est-ce un problème dans mon vhost ?? En essayant deux ou trois choses, j'ai pu résoudre en lui donnant :
    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
    22
     
    <VirtualHost *:80>
     
      ServerAdmin root@monsite.com
      ServerNamemonsite.com
      ServerAlias www.monsite.com
     
    DocumentRoot /tmp
     
    <Directory /tmp >
        Allow from all
        Deny from all
        Order deny,allow
    </Directory>
     
    RewriteEngine on
    RewriteRule /page/(.*)^ http://192.168.1.11:8080/Myapp?page=page_$1 [P]
     
    ErrorLog /var/log/apache2/monsite.com-error_log
    CustomLog /var/log/apache2/monsite.com-access_log combined
     
    </VirtualHost>
    /tmp contient le fichier index.html de apache (le "It works")... Mais suis-je obligé de lui donner un DoumentRoot ainsi que le noeud <Directory> ?? J'ai aussi modifié l'expression comme ça plus de problème pour les ressources.

    Je suis maintenant redirigé sur la page d'accueil de Tomcat.
    Une chose "bizarre" c'est que lorsque je commente les deux lignes de redirections avec un "#", j'obtiens exactement le même résultat... Je ne vois pas comment il s'y prend pour le rediriger...

    Edit 2 : le problème de la redirection sur la page d'accueil de Tomcat est résolu, c'était un vieux bout de mod_jk qui trainait !! Par contre la redirection ne se fait pas du tout.

  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
    Citation Envoyé par bernardlamotte Voir le message
    Par contre la redirection ne se fait pas du tout.
    Avec tous tes édits je suis perdu Peux-tu redétailler le problème, maintenant ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Par défaut
    Oups désolé, je me suis un peu emballé !!

    Alors voilà ce que je fais depuis ton premier poste :
    1. J'ai enlever mes proxypass et les ai remplacé par une RewriteRule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RewriteRule /page/(.*)^ http://192.168.1.11:8080/Myapp?page=page_$1 [P]
    2. Suite à cette modification j'ai eu cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Forbidden
     
    You don't have permission to access / on this server.
    Apache Server at www.mysite.com Port 80
    Avec dans les logs apache :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [Tue Oct 06 15:19:33 2009] [error] [client 192.168.3.1] client denied by server configuration: /usr/htdocs
    3. J'ai trouvé une solution à ce problème en ajoutant le DocumentRoot et le noeud <Directory>. Par contre je ne sais pas si ça règle vraiment la solution à mon problème...

    4. C'est là que je bloque... Lorsque je vais sur mon URL, je tombe sur la page j'ai mise en DocumentRoot sans qu'une redirection soit faite...

    Voilà à quoi ressemble mon Virtual Host actuellement :
    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
    22
     
    <VirtualHost *:80>
     
      ServerAdmin root@monsite.com
      ServerNamemonsite.com
      ServerAlias www.monsite.com
     
    DocumentRoot /tmp
     
    <Directory /tmp >
        Allow from all
        Deny from all
        Order deny,allow
    </Directory>
     
    RewriteEngine on
    RewriteRule /page/(.*)^ http://192.168.1.11:8080/Myapp?page=page_$1 [P]
     
    ErrorLog /var/log/apache2/monsite.com-error_log
    CustomLog /var/log/apache2/monsite.com-access_log combined
     
    </VirtualHost>
    Je ne sais pas du tout si les modifications que j'ai faite son correct... Merci encore pour ton aide !!!

  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
    Par défaut
    Je me suis trompé dans la RewriteRule, toutes mes excuses !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule /page/(.*)$ http://192.168.1.11:8080/Myapp?page=page_$1 [P]
    Fallait mettre un $ et pas un ^, ça ne veut pas du tout dire pareil

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Par défaut
    La redirection fonctionne mais c'est pas tout à fait à quoi je pensais !! Mais je me suis peut être mal exprimé... Mon but est que la réécriture d'URL soit totalement transparent pour l'utilisateur...

    En gros : Lorsque que je vais sur mon site : www.monsite.com/probleme, je ne souhaite pas que l'URL change, j'aimerais que la requête qui soit faite sur mon Tomcat (dans une DMZ) soit : http://192.168.1.11:8080/Myapp?page=probleme, mais sans changer l'URL dans le navigateur.

    Je ne sais pas si c'est vraiment possible... J'ai eu l'idée après avoir consulté cette page : http://g-rossolini.developpez.com/tu...h%E9orie#LII-3. Ou as-tu une autre solution ??

  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
    Par défaut
    Citation Envoyé par bernardlamotte Voir le message
    La redirection fonctionne mais c'est pas tout à fait à quoi je pensais !!
    Quelle redirection ? Il s'affiche quoi dans ton navigateur ? En toute logique, tu devrais garder http://site.com/page/probleme et voir le résultat de http://192.168.1.11:8080/Myapp?page=probleme. Si tu veux retirer /page dans l'URL il faut juste le retirer du RewriteRule.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Par défaut
    Désolé j'ai oublié d'écrire /page dans mon post... Alors lorsque je vais sur l'URL : http://site.com/page/probleme, la page charge pendant 2 minutes, puis j'ai l'erreur suivante :
    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
     
    The connection has timed out
     
     
    The server at 192.168.1.11 is taking too long to respond.
     
     
        *   The site could be temporarily unavailable or too busy. Try again in a few
              moments.
     
        *   If you are unable to load any pages, check your computer's network
              connection.
     
        *   If your computer or network is protected by a firewall or proxy, make sure
              that Shiretoko is permitted to access the Web.
    Et l'URL de mon navigateur devient alors : http://192.168.1.11:8080/Myapp/?page=page_probleme.

  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
    Par défaut
    Plutôt étrange qu'il y ait redirection, en effet, ça ne devrait pas être le cas. A tout hasard, aurais-tu désactiver mod_proxy ? Pour pouvoir utiliser le flag P il faut que mod_proxy et mod_proxy_http soient activés.

    Essaie aussi d'ajouter un flag L à la règle, mais je n'y crois pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule /page/(.*)$ http://192.168.1.11:8080/Myapp?page=page_$1 [P,L]

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Par défaut
    Non je n'ai pas désactivé le mod_proxy, j'ai juste enlevé de mon code les proxyPass et proxyPassReverse... Si je les réactive le proxy fonctionne donc le mod_proxy doit bien être activé.

    Sinon j'ai déjà essayé de rajouter le flag L sans résultat...

  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
    Par défaut
    Très étrange. Active les logs de mod_rewrite pour voir ce qu'il se passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteLog "/chemin/vers/mon/fichier.log"
    RewriteLogLevel 9
    Fais un essaie et vois dans ce fichier s'il y a l'explication de la redirection.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Par défaut
    Ok voici à quoi ressemble le fichier de log :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    192.168.1.1 - - [08/Oct/2009:11:16:31 +0000] [www.monsite.com/sid#158b228][rid#1635758/initial] (2) init rewrite engine with requested uri /page/probleme
    192.168.1.1 - - [08/Oct/2009:11:16:31 +0000] [www.monsite.com/sid#158b228][rid#1635758/initial] (3) applying pattern '/page/(.*)$' to uri '/page/probleme'
    192.168.1.1 - - [08/Oct/2009:11:16:31 +0000] [www.monsite.com/sid#158b228][rid#1635758/initial] (2) rewrite '/page/probleme' -> 'http://192.168.1.11:8080/Myapp?page=page_probleme'
    192.168.1.1 - - [08/Oct/2009:11:16:31 +0000] [www.monsite.com/sid#158b228][rid#1635758/initial] (3) split uri=http://192.168.1.11:8080/Myapp?page=page_probleme -> uri=http://192.168.1.11:8080/Myapp, args=page=page_probleme
    192.168.1.1 - - [08/Oct/2009:11:16:31 +0000] [www.monsite.com/sid#158b228][rid#1635758/initial] (2) forcing proxy-throughput with http://192.168.1.11:8080/Myapp
    192.168.1.1 - - [08/Oct/2009:11:16:31 +0000] [www.monsite.com/sid#158b228][rid#1635758/initial] (1) go-ahead with proxy request proxy:http://192.168.1.11:8080/Myapp [OK]

  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
    Par défaut
    J'ai compris ce qu'il se passe. Le problème vient en fait de Tomcat. Si tu regardes bien, mod_proxy dit :
    Citation Envoyé par mod_proxy
    rewrite '/page/probleme' -> 'http://192.168.1.11:8080/Myapp?page=page_probleme'
    Regarde bien : /Myapp?page=

    Maintenant, si on regarde l'URL sur laquelle ton navigateur est redirigé : http://192.168.1.11:8080/Myapp/?page=page_probleme : il y a un / en plus après Myapp !!!

    En fait, Apache demande bien à Tomcat Myapp?... mais Tomcat décide de rediriger sur Myapp/?... donc Apache renvoie au navigateur cette demande de redirection et le tour est joué.

    La question est donc de savoir pourquoi Tomcat redirige sur Myapp/?... au lieu de traiter Myapp?...

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Par défaut
    Je suis pas tout à fait sûr que le problème vient de là... J'avais déjà constaté ce "problème" lors du développement de mon application Myapp.

    Après avoir retesté mon application en local, lorsque que je vais sur l'URL : http://localhost:8080/Myapp?page=page_probleme, FireFox réécris l'URL avec le "/" (http://localhost:8080/Myapp/?page=page_probleme), sans que ça pose problème ! Et l'URL : http://localhost:8080/Myapp/?page=page_probleme, fonctionne tout aussi bien.

  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
    Par défaut
    Si, le problème vient de là : Tomcat renvoie une redirection qu'Apache transmet au navigateur sans convertir quoi que ce soit. Du coup, c'est le navigateur qui demande http://192.168.1.11:8080/Myapp/?page=page_probleme au lieu que ce soit Apache. Un contournement consisterait à ajouter ce / dans le RewriteRule pour éviter la redirection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule /page/(.*)$ http://192.168.1.11:8080/Myapp/?page=page_$1 [P,L]

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2008
    Messages : 14
    Par défaut
    Excellent ça fonctionne !!! Désolé d'avoir douté de toi

    Merci beaucoup pour ton aide d'avoir passé un peu de temps là-dessus !!!

    Par contre je me permets de ne pas passer le statut du post tout de suite en "Résolu". J'ai pas mal de trucs à modifier dans "MyApp" avec toutes ces modifications, donc il se peut que je te resollicite une fois (si ça ne te dérange pas)

    Merci encore !!!!

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

Discussions similaires

  1. [Débutant]infos ds session sans cookie ? url rewriting ?
    Par Satanas_et_diabolo dans le forum ASP
    Réponses: 8
    Dernier message: 10/10/2006, 17h13
  2. url rewriting
    Par olive.m dans le forum Apache
    Réponses: 3
    Dernier message: 17/06/2005, 02h01
  3. .htaccess - url rewriting, besoin de conseils
    Par giminik dans le forum Apache
    Réponses: 2
    Dernier message: 25/04/2005, 20h18
  4. Activer l'url rewriting
    Par Otaugames dans le forum Apache
    Réponses: 2
    Dernier message: 09/03/2005, 14h58
  5. Url Rewriting / htaccess
    Par bisi dans le forum Apache
    Réponses: 4
    Dernier message: 25/07/2004, 22h12

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