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 pour des images


Sujet :

Apache

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut URL rewriting pour des images
    Bonjour à tous,

    D'abord je vous prie de m'excuser si mon niveau en français ne me permettra pas de bien expliquer mon problème.
    je suis nouveau dans URL rewriting et ce que j'ai compris c'est que pour rendre le fichier physique (ex image), je dois avoir tous les parties de chemine et nom de mon fichier écries d'une maniéré ou une autre dans la requête http ou d'en ajouter dans les fichiers .htaccess .
    les image se trouvent dans le dossier pictures/products dans des sous dossier nommé automatiquement (ex 166400_166499 ).

    le nom d'un image est comme ceci :
    imageId_imageNumero_imageTaille_chaineEnCodé.jpg , sachant que chaineEnCodé est obtenu via la fonction sha1 à partir de trois paramétrés (imageId, imageNumero, imageTaille)

    ex: pictures/products/166400_166499/166463_0_1600x1200_8f106b52ea95c0cf8c1149f1437cbb5c6e1a666e.jpg

    C'est pas très difficile d'arriver à rendre mes images si je choisie que mes url seront da la forme suivants:
    pictures/products/166400_166499/166463/1600x1200/0/8f106b52ea95c0cf8c1149f1437cbb5c6e1a666e/nom_de_mon_choix.jpg

    mais c'est moche et je pense que Google limite la taille de url pour que ce soit indexé .

    Alors j'ai pensé à rediriger toute les demandes des image vers un scripte image.php pour que je choisie une forme moins courte avec les trois paramétrés importantes (imageId, imageNumero, imageTaille) et a partir ces paramétrés je construit l'url réel de l'image (trouver le nom de sous dossier et chaineEnCodé ).

    ex: pictures/products/166463/1600x1200/0/nom_de_mon_choix.jpg

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^pictures\/products\/([^\/]+)\/([^\/]+)\/([^\/]+)\/(.*\.jpg) image.php?id=$1&size=$2&numero=$3 [NC,L]

    Mais j'ai trouvé des problème avec ça, en faite l'image ne s'affiche pas .
    sauf si je vais dans le source code de la page (le html dans le navigateur ) et cliquer sur l'url de l'image.

    Je suis perdu parce que je sais pas pourquoi ça marche pas , c'est au niveau d’apache ou php ou html . ou c'est tous simplement n'est pas possible à faire .

    Merci à l'avance pour votre aide

  2. #2
    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 walidEduc Voir le message
    sauf si je vais dans le source code de la page (le html dans le navigateur ) et cliquer sur l'url de l'image.
    Dans ce cas, quelle est l'URL de l'image qui apparaît dans la barre d'adresse du navigateur ?

    A priori le problème est dans ton script image.php. Il faut préciser un en-tête Content-Type dans ce que tu renvoies au navigateur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-Type: image/jpeg");

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour Mac,

    Merci pour ton intervention et je veux t'expliquer tous ce que je fais.
    Dans ce cas, quelle est l'URL de l'image qui apparaît dans la barre d'adresse du navigateur ?
    je fait les tests sur ces trois fichiers

    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <img src='http://localhost/test/pictures/products/166463/1600x1200/0/bioviva-LE_ROI_DU_JARDIN_DDPB-Domino_droles_de_petites_betes.jpg' alt="picture with very prety url :-)">
    </br>
    .htaccess au niveau de racine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    # Fichier .htaccess /test/
    Options FollowSymLinks
    RewriteEngine on
    #RewriteRule ^pictures\/products\/([^\/]+)\/([^\/]+)\/([^\/]+)\/(.*\.jpg) pictures/products/166400_166499/$1_$3_$2_8f106b52ea95c0cf8c1149f1437cbb5c6e1a666e.jpg [NC,L]
    RewriteRule ^pictures\/products\/([^\/]+)\/([^\/]+)\/([^\/]+)\/(.*\.jpg) image.php?id=$1&size=$2&numero=$3 [NC,L]
    image.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    //header("Content-Type: image/jpeg");
     
    echo '<img src=http://localhost/test/pictures/products/166400_166499'.'/'.$_GET['id'].'_'.$_GET['numero'].'_'.$_GET['size'].'_'.'8f106b52ea95c0cf8c1149f1437cbb5c6e1a666e.jpg>';
     
    ?>
    si je tape dans le navigateur
    http://localhost/test/pictures/produ...ites_betes.jpg
    le .htaccess fait la redirection vers image.php et je vois mon image .

    Mais quand la demande de l'image se fait à index.php je le vois pas.
    quand j'ai ajouté dans image.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-Type: image/jpeg");
    et je retape
    http://localhost/test/pictures/produ...ites_betes.jpg
    j'ai l'erreur "the image cannot be displayed because it contains errors"

    je suis pas vraiment doué dans le web toute aide est apprécié Merci

  4. #4
    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
    Je persiste à croire que le problème est dans ton script image.php. Tu peux nous donner le code de ce script ?

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour Mac,

    Vue que pour le moment je fais que tester le principe, alors il n'y a que 2 linges dans mon script image.php, je récupéré les paramétré $_GET en suite je je construit le chemin réel vers mon image.

    Une fois que j'ai le chemin,ce là que je ne sais pas exactement quoi faire est que :
    - Je l'envoie dans une balise <img> en utilisant echo ?
    - Je l'envoie dans une balise <img> en utilisant return ?
    - Je l'envoie comme une chaîne de caractère en utilisant return ou echo ?
    - Il y a une fonction qui peut aider ?

    Que tu penses ?

    En gros, Comment dire à apache qu'il aille chercher l'image à ce chemin et l'afficher là où le premier appel a été fait (ex dans le ficher index.php).

    Tous ce qu'il y a dans image.php est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     <?php
    //header("Content-Type: image/jpeg");
     
    echo '<img src=http://localhost/test/pictures/products/166400_166499'.'/'.$_GET['id'].'_'.$_GET['numero'].'_'.$_GET['size'].'_'.'8f106b52ea95c0cf8c1149f1437cbb5c6e1a666e.jpg>';
     
    ?>
    Une point à éclairer Stp , est que dans le scripte pour le primer appel de l’image (index.php) j’utilise la balise juste <img src ='le chemin fictif '> ou il y a une moyen de jouer sur ça mais en gardant que Google va toujours l’indexer comme image.

    Je te remercie encore une fois.

  6. #6
    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
    Je n'avais pas bien vu. Ce n'est pas correct : ton script renvoie du code HTML, et pas l'image, alors qu'il faut renvoyer l'image. Il faut plutôt faire un truc du genre :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    header("Content-Type: image/jpeg");
     
    $code = ...;
    include("pictures/products/166400_166499/".$_GET["id"]."_".$_GET["numero"]."_".$_GET["size"]."_".$code.".jpg");
    ?>
    mais c'est super moche et non sécurisé : il faut a minima vérifier la valeur des paramètres avant de renvoyer l'image, car en bricolant les paramètres d'URL on peut potentiellement renvoyer n'importe quel fichier de ton site. Idéalement, il faut aussi renvoyer un en-tête Content-Length.

    Assure-toi aussi que le chemin vers l'image est correct : j'ai mis un truc au pif.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour Mac,
    Merci pour tes retour et conseils, pour la sécurité, mes paramètres passent par une fonction qui les vérifie.
    il faut a minima vérifier la valeur des paramètres avant de renvoyer l'image
    tu as raison que c'est super moche , mais j'ai été demandé de le faire sans changer les noms des images,alors c'est la solution que j'ai trouvé ( si tu as d'autre idées,seront appréciés ).
    J'ai essayé d’utiliser la fonction include mais ça n'a pas fonctionné.
    Cependant,Avec l'aide d'un ami j'ai trouvé une manière de le faire comme suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //script image.php 
    $location ='le chemin vers mon image construit à partir de paramétrés reçus  ';
     
    header("Content-Type: image/jpeg");
    echo file_get_contents($location);
    je voulais partager ça, peut-être sera utile pour quelqu'un d'autre.

    Merci encore.

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

Discussions similaires

  1. [Toutes versions] Lien url pour des images
    Par info009 dans le forum SharePoint
    Réponses: 4
    Dernier message: 09/07/2013, 06h51
  2. Réponses: 6
    Dernier message: 12/12/2010, 01h12
  3. Réponses: 6
    Dernier message: 21/05/2010, 17h40
  4. Réponses: 2
    Dernier message: 15/03/2010, 15h55
  5. Réponses: 8
    Dernier message: 19/04/2005, 12h04

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