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éécriture sur entête HTTP


Sujet :

Apache

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Points : 46
    Points
    46
    Par défaut [URL Rewriting] Réécriture sur entête HTTP
    Bonjour à tous,

    Je voudrais savoir si ce que je veux faire est possible avec mod_rewrite, et si oui, éventuellement comment .

    Je voudrais re-écrire une url en intercalant un niveau de répertoire supplémentaire dont la valeur serait issue d'un entête HTTP (de la request HTTP).

    Ex : supposons qu'une variable d'entête HTTP soit USER_ID et qu'elle soit égale pour la request donnée à 123456789

    L'URL envoyée http://monsite.fr:80/MonAppli/MonRepertoire/toto.html serait dont traduite en :

    http://monsite.fr:80/MonAppli/MonRepertoire/123456789/toto.html

    Merci d'avance.

  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
    Qu'appelez-vous "variable d'entête" ? En utilisant %{HTTP:X} où X est le nom de l'entête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule /MonAppli/MonRepertoire/toto.html /MonAppli/MonRepertoire/%{HTTP:USER_ID}/toto.html
    ?

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Oui exactement.

    Mais peut-on utiliser %{HTTP:X} dans une directive RewriteRule ?

    En lisant la doc (http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html), j'avais peur que ce ne soit possible que dans une directive RewriteCond.

    Si on peut, mon pb est résolu.

  4. #4
    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
    Vous n'avez pas essayé ? Je pense que oui, comme les autres variables, sinon au pire, on peut utiliser une capture sur une règle RewriteCond

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    J'essaierai lundi. C'est une idée qui m'est venue aujourd'hui et je voulais "anticiper".

    Encore merci.

  6. #6
    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
    Soit l'arborescence suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /
        index.php
        .htacess
        123456789/
            index.php
    /index.php :
    /123456789/index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $dirs = preg_split('~[/\\\]~', dirname(__FILE__));
    echo array_pop($dirs);
    /.htaccess (renvoi sur le sous-répertoire correspondant à la valeur de l'entête USER_ID) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RewriteEngine on
    # Si défini ...
    RewriteCond %{HTTP:USER_ID} !^$
    RewriteRule ^([^/]+)$ %{HTTP:USER_ID}/$1
    Et le client suivant, qui définit cet entête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $ch = curl_init('http://localhost/index.php');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('USER_ID: 123456789'));
    curl_exec($ch);
    curl_close($ch);
    Résultat :
    [julp@freebsd6 ~]$ php -f curl.php
    123456789
    Sans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $ch = curl_init('http://localhost/index.php');
    curl_exec($ch);
    curl_close($ch);
    Résultat :
    [julp@freebsd6 ~]$ php -f curl.php
    /

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Oulala ... plus que merci !

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Dans mon cas exact, l'URL à un préfixe fixe (disons SITE), puis un numéro de contrat, puis le fichier lui-même, et je voudrais insérer après le numéro de contrat, la valeur de la variable HTTP.

    Ex : /SITE1/contrat1/fichier.html --> /SITE1/contrat1/123456789/fichier.html

    Je sens donc "presque" bien quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteEngine on
    RewriteRule ^/SITE1/([^/]+)/(.*)    /SITE1/$1/%{HTTP:USER_ID}/$2 [L]
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteEngine on
    RewriteRule ^/SITE1/([^/]+)(.*)     /SITE1/$1/%{HTTP:USER_ID}$2 [L]
    Pas loin non ?

  9. #9
    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
    Plutôt la première proposition. Cependant, le chemin (premier argument de la règle RewriteRule) dépend de l'emplacement de cette règle (fichier .htaccess ou non et dans le premier cas, le répertoire où il est placé entre aussi en jeu). Il faudrait, je pense, aussi s'assurer avant d'utiliser une telle règle, que votre entête est bien défini (via RewriteCond - cf exemple plus haut).

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Pourquoi est-ce différent dans un fichier .htaccess ? Faut-il remplacer les URL absolues du RewriteRule par des URL relatives ? Ou bien y a-t-il une subtilité ?

  11. #11
    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
    C'est différent (sinon je n'aborderais pas la question), puisque dans le cas des fichiers htaccess le chemin qui a été suivi avant son appel s'en retrouve tronqué. Ceci est expliqué dans la documentation (2e § de la partie intitulée Per-directory Rewrites) et ici-même.

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Limpide, what else ?

Discussions similaires

  1. [URL Rewriting] RewriteCond sur entête user agent
    Par latouche dans le forum Apache
    Réponses: 1
    Dernier message: 28/05/2008, 19h08
  2. Réponses: 7
    Dernier message: 19/03/2008, 16h07
  3. [URL Rewriting] Infos sur l'URL Rewriting
    Par Thomad dans le forum Apache
    Réponses: 2
    Dernier message: 16/09/2007, 00h13
  4. [URL Rewriting] problème sur une règle
    Par Mike91 dans le forum Apache
    Réponses: 1
    Dernier message: 13/09/2007, 16h20
  5. [URL Rewriting] Réécriture et espaces
    Par iwf-fr dans le forum Apache
    Réponses: 5
    Dernier message: 02/09/2007, 14h33

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