Précédent   Forum du club des développeurs et IT Pro > Webmasters - Développement Web > Serveurs (Apache, IIS,...) > Apache
Apache Forum d'entraide Apache. Avant de poster : Cours Apache, FAQ Apache
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/01/2013, 23h21   #1
Squalthor
Membre du Club
 
Avatar de Squalthor
 
Homme
Autodidacte
Inscription : juillet 2006
Messages : 167
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Autodidacte

Informations forums :
Inscription : juillet 2006
Messages : 167
Points : 58
Points : 58
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...
Citation:
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.
Squalthor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 14h25   #2
Squalthor
Membre du Club
 
Avatar de Squalthor
 
Homme
Autodidacte
Inscription : juillet 2006
Messages : 167
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Autodidacte

Informations forums :
Inscription : juillet 2006
Messages : 167
Points : 58
Points : 58
En regardant de plus près dans les logs d'apache j'ai cette ligne concernant cette image:
Citation:
[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.
Squalthor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 20h10   #3
_Mac_
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 9 190
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 9 190
Points : 10 762
Points : 10 762
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 :
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
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 20h33   #4
Squalthor
Membre du Club
 
Avatar de Squalthor
 
Homme
Autodidacte
Inscription : juillet 2006
Messages : 167
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Autodidacte

Informations forums :
Inscription : juillet 2006
Messages : 167
Points : 58
Points : 58
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:

Citation:
^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
Squalthor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 21h43   #5
_Mac_
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 9 190
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 9 190
Points : 10 762
Points : 10 762
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
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 11h55   #6
Squalthor
Membre du Club
 
Avatar de Squalthor
 
Homme
Autodidacte
Inscription : juillet 2006
Messages : 167
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Autodidacte

Informations forums :
Inscription : juillet 2006
Messages : 167
Points : 58
Points : 58
Bonjour Mac,

Voici le contenu de mon .htaccess:
Code :
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.
Squalthor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 18h48   #7
_Mac_
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 9 190
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 9 190
Points : 10 762
Points : 10 762
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 :
RewriteRule ^toto\.jpg$ /chemin/vers/images/toto.jpg [QSA,NC,L]
et si ça marche, élargit le filtre à tous les .jpg :
Code :
RewriteRule ^(.*\.jpg)$ /chemin/vers/images/$1 [QSA,NC,L]
et si ça marche, on élargit encore :
Code :
RewriteRule ^(.*)\.(jpg)$ /chemin/vers/images/$1.$2 [QSA,NC,L]
et on devrait aboutir à ma syntaxe :
Code :
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 :
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
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 20h14   #8
Squalthor
Membre du Club
 
Avatar de Squalthor
 
Homme
Autodidacte
Inscription : juillet 2006
Messages : 167
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Autodidacte

Informations forums :
Inscription : juillet 2006
Messages : 167
Points : 58
Points : 58
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:
Citation:
[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...
Squalthor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 23h45   #9
_Mac_
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 9 190
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 9 190
Points : 10 762
Points : 10 762
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 :
RewriteRule ^([^/]*\.jpg)$ /chemin/vers/images/$1 [QSA,NC,L]
Code :
RewriteRule ^([^/]*)\.(jpg)$ /chemin/vers/images/$1.$2 [QSA,NC,L]
Code :
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
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 11h08   #10
Squalthor
Membre du Club
 
Avatar de Squalthor
 
Homme
Autodidacte
Inscription : juillet 2006
Messages : 167
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Autodidacte

Informations forums :
Inscription : juillet 2006
Messages : 167
Points : 58
Points : 58
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.
Squalthor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h57.


 
 
 
 
Partenaires

Hébergement Web