Aller au contenu

Problème de réécriture d'URL


Sujets conseillés

Bonjour à tous,

je propose sur mon site internet un espace où mes membres peuvent uploader ce qu'ils veulent. Auparavant, les fichiers allaient tous dans le dossiers /uploads/ et n'étaient pas trop nombreux. Désormais, ils dépassent le nombre des 10 000 et j'ai été obligé de les classer dans des sous repertoires, selon le nom d'utilisateur du membre.

Auparavant, l'url vers les images était ainsi :

http://site.com/uploads/membre_monchat.jpg

Désormais, l'url est ainsi :

http://site.com/uploads/m/membre/monchat.jpg

Tout les fichier sont classés sans problème est automatiquement, mais l'URL rewriting (pour que les liens que les visiteurs ont placés à travers tout le web ne soient pas mort) ne fonctionne pas totalement !

En effet, il fonctionne pour certaines images et pas pour d'autre (??!??). Apparemment, il y a un soucis au niveau de l'underscore, dans le cas où "monchat.jpg" est en réalité écrit "mon_chat.jpg". Voici ma ligne de réécriture :

RewriteRule ^uploads/([^.]{1})(.*)_(.*)$ /~site/uploads/$1/$1$2/$3 [L]

http://ns00000.ovh.net/~site/uploads/membre_monchat.jpg fonctionne !
http://ns00000.ovh.net/~site/uploads/membre_mon_chat.jpg ne fonctionne pas

La deuxième URL retourne l'erreur :

/~site/uploads/m/m/membre/mon/chat.jpg was not found on this server.

alors qu'elle devrait plutôt chercher :

/~site/uploads/m/membre/mon_chat.jpg

... donc évidemment, ça ne fonctionne pas ! Comment corriger ça ? J'ai strictement aucune idée, là...

Merci beaucoup !

Lien vers le commentaire
Partager sur d’autres sites

Pour permettre l'emploi de l'underscore dans le nom de fichier, il faut modifier ta règle.

RewriteRule ^uploads/([^.]{1})(.*)_(.*)$ /~site/uploads/$1/$1$2/$3 [L]

qui devient

RewriteRule ^uploads/([^.]{1})([^_]*)_(.*)$ /~site/uploads/$1/$1$2/$3 [L]

La raison pour laquelle ta règle ne marchait pas dans le cas de membre_mon_chat.jpg est que lorsque tu utilises des wildcars tels que *, le match se fera avec la chaîne la plus longue possible, donc dans ton cas: "membre_mon" au lieu de "membre", les deux étant suivis par un undescore.

Mais avec cette règle, c'est le nom du membre qui ne pourra pas avoir d'underscore.

Dan

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ta réponse Dan.

Je ne sais pas pourquoi mais ça ne fonctionne toujours pas... L'erreur reste la même :

/~site/uploads/l/l/laurent/policier/bleu.jpg was not found on this server.

J'ai bien vidé cache et compagnie, mais non, ça reste :/. "membre" est bien sans underscore...

{1} veut bien dire qu'il n'y a qu'un seul caractère d'autorisé ?

Lien vers le commentaire
Partager sur d’autres sites

Problème résolu :) Il fallait également interdire le caractère "/" (sinon il y avait une boucle). Au cas où, si ça peut aider quelqu'un :

RewriteRule ^uploads/([^_]{1})([^_]*)_(.*)$ /~site/uploads/$1/$1$2/$3 [L]

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...