web-dev-qa-db-fra.com

Comment dire à un répertoire que tous les fichiers qu'il contient doivent être traités comme des fichiers PNG?

J'ai des PNG dans lesquels, par exemple, ils sont nommés "5021" plutôt que "5021.png" et pour certaines images, cela convient et s'affiche comme une image normale, mais d'autres se téléchargent automatiquement; Une personne qui a ensuite cessé de répondre m'a dit que je pouvais ajouter une règle dans .htaccess pour que les fichiers soient tous visualisés sous forme d'images et qu'aucun téléchargement ne soit effectué.

Les images sont affichées au format https://i.domain.com/<number> ex https://i.domain.com/5021

Comment puis-je faire cela ou y a-t-il un autre/meilleur moyen de faire cela?

4
Skylark

En fait, il y a plusieurs façons, faites votre choix ...

Vous pouvez utiliser la méthode qui consiste à ne rien faire ...

De nos jours, la plupart des navigateurs peuvent établir des types de contenu sans extension de fichier. Ils téléchargent les premiers octets, découvrent le type puis le traitent en un clin d'œil. Cependant, ce n'est pas une méthode parfaite.

Utilisation de JavaScript pour supprimer les extensions de fichier localement

La méthode ci-dessous est pratique si vous souhaitez supprimer img, ou une extension réellement sur la page, afin de pouvoir intégrer des images à l'aide de <img src="your-image-without-extension">. Cependant, ce n'est pas très pratique si vous souhaitez l'utiliser sur un autre site, car seules les pages avec ce code JavaScript fonctionneront.

$(document).ready(function (){
    var regex = new RegExp("(.jpg|.png)$", "i");
    var image = $("img").each(function (){
        var src = $(this).attr('src');
        if( src.search(regex) == -1){
            var index = src.lastIndexOf('.') < 0 ? src.length:src.lastIndexOf('.');
            $(this).attr('src',src.substring(0, index) + ".jpg");
        }
    });
});

Réécrire l'extension en utilisant .htaccess

En utilisant .htaccess, vous pouvez réécrire vos URL sans inclure le fichier image. Utiliser quelque chose comme ceci devrait faire l'affaire:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.png [NC,L]

Cette méthode vous permettra d'utiliser des URL avec ou sans png. Localement et à l'extérieur. L'avantage de ceci est que vous n'avez pas besoin de perdre du temps à renommer des fichiers image.

Définition du contenu de type MIME via htaccess

En utilisant le fichier httpd.conf ou un fichier htaccess, vous pouvez définir le type de contenu de la page comme suit:

.htaccess (copier dans le dossier de l'image)

ForceType image/png

ou si vous pouvez utiliser le fichier httpd.conf,

<Directory /path-to-images>
    ForceType image/png
</Directory>

Négociation de contenu avec mod_negotiation

Qu'est-ce que la négociation de contenu?

La négociation de contenu est une fonctionnalité peu utilisée d'Apache et de IIS qui fournit de manière transparente la meilleure variante de la même ressource aux navigateurs. Les navigateurs indiquent aux serveurs leurs préférences et les serveurs ajustent leurs réponses pour sélectionner la meilleure ressource. Différentes langues, types de fichiers, codages de contenu et jeux de caractères peuvent être automatiquement livrés à différents navigateurs en fonction des préférences fournies par le navigateur et envoyées dans les demandes d'en-tête. Vous pouvez modifier les dimensions suivantes avec la négociation de contenu:

Media type
Language
Content encoding
Charset

Vous pouvez choisir d'utiliser négociation de contenu avec mod_negotiation qui négociera le meilleur format, par exemple, vous avez des fichiers jpg, gif et png, puis l'URL sans l'extension de fichier que le serveur négociera. utiliser sans l'ajouter à l'extension de fichier.

3
Simon Hayter