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] Rediriger toutes les images


Sujet :

Apache

  1. #1
    Membre régulier Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 176
    Points : 103
    Points
    103
    Par défaut [URL rewriting] Rediriger toutes les images
    Bonsoir,

    J'essaie d'écrire une règle me permettant d'aller chercher toutes les images dans un même répertoire, sans afficher le chemin complet pour ne pas montrer la structure de mon site.

    Mais là je sèche, voir pire...
    Peu importe les essai ça ne marche pas, je suis quasiment sûr que parmi mes essais certains auraient dû fonctionner !

    Voici la règle qui me semble la plus correcte, mais qui ne fonctionne pas...
    RewriteRule ^(.*+[png-jpg-jpeg-gif]+)$ /chemin/du/repertoire/$1 [QSA,NC,L]
    Pourriez-vous me confirmer, ou pas, si cette règle devrait fonctionner svp ?

    Je vous remercie.

    Cordialement, Squal.

  2. #2
    Membre régulier Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 176
    Points : 103
    Points
    103
    Par défaut
    En regardant de plus près dans les logs d'apache j'ai cette ligne concernant cette image:
    [02/Jan/2013:14:19:17 +0100] "GET /gif.gif HTTP/1.1" 404 422
    Ce que je ne comprend pas c'est que des règles ayant fonctionnées dans le passé ne fonctionne actuellement pas.

  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
    Le "*+" ne me paraît pas correct : * et + sont des multiplicateurs et ne peuvent pas logiquement apparaître l'un après l'autre. Je supprimerais au moins le +.

    Par ailleurs, ta syntaxe n'est pas la plus adaptée. La syntaxe idoine me semble plutôt être celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*)\.(png|jpg|jpeg|gif)$ /chemin/du/repertoire/$1.$2 [NC,L]

    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 régulier Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 176
    Points : 103
    Points
    103
    Par défaut
    Bonsoir Mac,

    Merci pour ton aide !
    J'ai testé ta règle, malheureusement elle ne fonctionne pas, je me demande si mon serveur n'a pas un problème de configuration.
    Mais mes autres règles fonctionnent...
    J'ai retrouver une règle me permettant de rediriger les images vers le répertoire voulu, mais c'est pas la perfection que j'aimerais étant donné que je dois ajouter "img_" devant les images:

    ^img_(.+[png-jpg-jpeg-gif]+)$ /moteur/interface/images/$1
    As-tu testé, ou es-tu sûr de ta règle s'il te plait ?
    J'aimerais savoir si c'est un défaut d'interprétation de mon serveur (OVH/Squeeze).

    Merci !

    Cordialement, Squal

  5. #5
    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
    Citation Envoyé par Squalthor Voir le message
    étant donné que je dois ajouter "img_" devant les images
    Ca sent le conflit avec une autre règle de réécriture, ça. Tu peux donner le contenu complet du .htaccess ?

    Je ne crois pas trop à un problème avec la négociation de contenu à cause de l'erreur 404, mais pourquoi pas. Essaie d'activer ou désactiver la négociation de contenu, pour voir :
    ou

    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

  6. #6
    Membre régulier Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 176
    Points : 103
    Points
    103
    Par défaut
    Bonjour Mac,

    Voici le contenu de mon .htaccess:
    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
    23
    24
    25
    26
    27
    28
    Options +FollowSymLinks
    SetEnv MAGIC_QUOTES 0
    php_flag magic_quotes_gpc off
    php_flag magic_quotes_runtime off
    php_flag display_errors on
    php_flag allow_url_fopen off
    RewriteEngine on
     
    RewriteBase /
    FileETag none
     
    ReWriteCond %{SERVER_PORT} !^80$
    RewriteCond %{HTTP_HOST} !^dev\.(.*) [NC]
    RewriteCond %{HTTP_HOST} !^iteractif$ [NC]
    RewriteRule ^(.*)$ http://dev.iteractif.com/$1 [QSA,R=301,NC,L]
     
     
    ############### Images #######################
    RewriteRule ^img_(.+[png-jpg-jpeg-gif]+)$ /chemin/vers/images/$1 [QSA,NC,L]
    ############### css#######################
    RewriteRule ^css\.css$ /chemin/vers/css.css [QSA,NC,L]
    ############### Js #######################
    RewriteRule ^jquery\.js$  /chemin/vers/jquery/jquery-1.8.3.js [QSA,NC,L] #Jquery
    RewriteRule ^js\.js$  /chemin/vers/js.classe.js [QSA,NC,L]
     
     
    ############### pages ####################
    RewriteRule ^([_0-9a-zA-Z/-])?$ /index.php#$1 [QSA,NC,L]

    La négociation de contenu ne change rien.

    Encore merci de prendre le temps pour m'aider !

    Cordialement, Squal.

  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
    Citation Envoyé par Squalthor Voir le message
    As-tu testé, ou es-tu sûr de ta règle s'il te plait ?
    Non, je n'ai pas testé ma règle, c'est une syntaxe que j'ai écrite de mémoire.

    Je ne vois pas de conflit dans ta configuration donc en effet, ça doit être un problème de syntaxe. Etant donné qu'une approche similaire fonctionne pour jquery.js, je te propose de commencer par un test simple sur une image bien précise, puis d'élargir progressivement le filtre. Par exemple, tu commences avec l'image toto.jpg qui existe bien dans le répertoire /chemin/vers/images :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^toto\.jpg$ /chemin/vers/images/toto.jpg [QSA,NC,L]
    et si ça marche, élargit le filtre à tous les .jpg :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*\.jpg)$ /chemin/vers/images/$1 [QSA,NC,L]
    et si ça marche, on élargit encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*)\.(jpg)$ /chemin/vers/images/$1.$2 [QSA,NC,L]
    et on devrait aboutir à ma syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^(.*)\.(jpg|gif)$ /chemin/vers/images/$1.$2 [QSA,NC,L]
    Si tu accès à la configuration centrale d'Apache (httpd.conf), actives le debug de mod_rewrite pour comprendre à un moment pourquoi ça ne marche plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RewriteLog /chemin/vers/fichier.log
    RewriteLogLevel 9

    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

  8. #8
    Membre régulier Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 176
    Points : 103
    Points
    103
    Par défaut
    Edition: J'ai écris trop vite je fais des controles et je met à jour...

    Voilà, désolé je me suis un peu trop empressé, du coup je n'avais pas fais les choses correctement.

    Le debug rewrite est maintenant activé.
    Dès la tentative numéro 2 ça ne fonctionne pas.
    Voici ce que le debug me dit:
    [error] [client 78.250.248.83] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://ip_du_serveur.com/
    [Thu Jan 03 20:22:03 2013] [debug] core.c(3063): [client 78.250.248.83] r->uri = /dossier/images/dossier/images/dossier/images/dossier/images/dossier/images/dossier/images/dossier/images/dossier/images/dossier/images/dossier/images/chrome_logo.gif, referer: http://ip_du_serveur.com/
    78.250.248.83 - - [03/Jan/2013:20:22:03 +0100] "GET /chrome_logo.gif HTTP/1.1" 500 727 "http://ip_du_serveur.com/" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0.11) Gecko/20100101 Firefox/10.0.11 Iceweasel/10.0.11"
    Le message en gras apparait 4 ou 5 fois de suite, y a récursivité et ce peu importe si je met un / devant le nom de l'image...

  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
    Points : 12 977
    Points
    12 977
    Par défaut
    En effet, j'avais oublié de vérifier les boucles infinies. C'est la raison pour laquelle ton img_ est obligatoire pour que ça mache. Car en effet, le filtre ^(.*\.jpg)$ matche des URL simples http://site.com/toto.jpg mais aussi la réécriture /chemin/vers/images/toto.jpg. Ce n'est pas le cas pour jquery.js car ton filtre est ultra-spécifique.

    Bref, 2 solutions : faire un filtre plus spécifique ou ajouter une condition. Je pense que le premier cas est jouable étant donné ton exemple sur jquery : si j'ai bien compris ton site, toutes les images sont supposées se trouver (virtuellement) à la racine du site, ce qui signifie que le caractère / ne peut pas se retrouver dans le chemin vérifié par RewriteRule. Me trompe-je ? Si non, il s'agit tout simplement de remplacer .* dans mes règles par [^/]* :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([^/]*\.jpg)$ /chemin/vers/images/$1 [QSA,NC,L]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([^/]*)\.(jpg)$ /chemin/vers/images/$1.$2 [QSA,NC,L]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^([^/]*)\.(jpg|gif)$ /chemin/vers/images/$1.$2 [QSA,NC,L]

    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

  10. #10
    Membre régulier Avatar de Squalthor
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2006
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Juillet 2006
    Messages : 176
    Points : 103
    Points
    103
    Par défaut
    Bonjour Mac !

    Tu as résolu mon problème, tout fonctionne correctement maintenant !
    Et j'en ai en plus appris plus sur le fonctionnement du .htaccess.
    Jamais je ne me serais douté qu'il pouvait y avoir une boucle inifine et je ne pense pas que j'aurais trouvé comment régler le problème.

    Merci pour ton aide et pour le fait de m'avoir aiguillé/aidé de A jusqu'à Z.

    Cordialement, Squal.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/05/2012, 22h52
  2. URL Rewriting pour toutes les pages
    Par Paniez dans le forum Apache
    Réponses: 7
    Dernier message: 29/12/2011, 19h16
  3. Réponses: 2
    Dernier message: 08/03/2011, 17h43
  4. [RegEx] Modifier les URL de toutes les images
    Par Seta-san dans le forum Langage
    Réponses: 8
    Dernier message: 23/03/2010, 15h04
  5. Réponses: 1
    Dernier message: 29/02/2008, 17h54

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