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 :

RewriteRule et expression régulière


Sujet :

Apache

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Points : 47
    Points
    47
    Par défaut RewriteRule et expression régulière
    Bonjour à tous.

    Je travaille sur un projet où l'url des médias ressemblent à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object/{ID}?assetprofile_pid={assetprofile_pid}&transformation={transformation}
    l'asset assetprofile est un format de périphérique. exemple : smartphone, tablette, web
    La transformation et un redimensionnement. exemple : icon, fullscreen, icon_xhdpi (Pour un périphérique en xhdpi)

    Exemple :



    Jusque là tous va bien.
    Chaque élément est bien identifié.

    Le problème c'est qu'on a voulu utiliser des urls plus "simple"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object/asset/{partie_1_du_ID}-{partie_2_du_ID}-{partie_2_du_assetprofile_pid}_{transformation}.{ext}
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object/asset/wzobj-image_538484484ff10-smartphone_icon_xhdpi.jpg
    On utilise la RewriteRule suivante pour faire fonctionner l'url précédente avec le vrai système.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^object/asset/(.+)-(.+)-(.+)_(.+)(\.(.+)) object/$1:$2/data?assetprofile_pid=wzap:$3&transformation=$4&%1 [L]
    Ce système fonctionnait jusqu'a ce que l'on utilise des transformations contenant des underscores (_)

    En effet voici comment apache découpe l'url :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     object/asset/  wzobj - image_538484484ff10 - smartphone_icon _ xhdpi .jpg
    ^object/asset/ (.+)   - (.+)                - (.+)            _ (.+)  (\.(.+))
    Comme faire pour qu'il découpe l'url ainsi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     object/asset/  wzobj - image_538484484ff10 - smartphone _ icon_xhdpi .jpg
    ^object/asset/ (.+)   - (.+)                - (.+)       _ (.+)       (\.(.+))
    sachant que transformation peut avoir un underscores ou non.

    Merci pour votre aide

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Points : 47
    Points
    47
    Par défaut solution alternative
    J'ai trouvé une solution alternative.
    Ce n'est pas très élégant mais ça marche..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RewriteRule ^object/asset/(.+)-(.+)-(.+)_(.+)_(.+)(\.(.+)) object/$1:$2/data?assetprofile_pid=wzap:$3&transformation=$4_$5&%1 [L]
    RewriteRule ^object/asset/(.+)-(.+)-(.+)_(.+)(\.(.+))      object/$1:$2/data?assetprofile_pid=wzap:$3&transformation=$4&%1 [L]
    Mais j'aimerais quand même bien savoir comment résoudre le pb proprement.

  3. #3
    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
    Si l'asset profile n'a jamais de _, tu peux tenter ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^object/asset/(.+)-(.+)-([^_]+)_(.+)(\.(.+))      object/$1:$2/data?assetprofile_pid=wzap:$3&transformation=$4&%1 [L]
    Mais ta solution est tout à fait convenable.

    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

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Points : 47
    Points
    47
    Par défaut
    Intéressant.

    Il faudrait que je vérifie si l'assetprofile n'a jamais de '_'.

    Pour ce qui est de ma solution; je me suis fait avoir par la transformation "asset_poi_icon" qui contient 2 '_'.
    Ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    RewriteRule ^object/asset/(.+)-(.+)-(.+)_(.+)_(.+)_(.+)(\.(.+)) object/$1:$2/data?assetprofile_pid=wzap:$3&transformation=$4_$5_$6&%1 [L]
    RewriteRule ^object/asset/(.+)-(.+)-(.+)_(.+)_(.+)(\.(.+)) object/$1:$2/data?assetprofile_pid=wzap:$3&transformation=$4_$5&%1 [L]
    RewriteRule ^object/asset/(.+)-(.+)-(.+)_(.+)(\.(.+))      object/$1:$2/data?assetprofile_pid=wzap:$3&transformation=$4&%1 [L]
    Je ne sais pas s'il y a des transformations avec 3 '_' ...

    Et si il y en a dans les assetprofile je pense que ça va faire du problème !

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/09/2013, 09h00
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 18h17
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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