(htaccess) comment empêcher un fichier D'accéder directement à L'URL?

C'est mon deuxième post pour le même problème. Coz le post précédent avait besoin d'un autre exemple.

Ok disons encore une fois, j'utilise Apache et j'ai un exemple de dossier web (sur mon Localhost) comme:

Dans le dossier, les fichiers seront:

  • index.html
  • échantillon.jpg
  • .htaccess

"L'indice.html " inclura simplement:

<html>
<body>
    <img src="sample.jpg" />
</body>
</html>

Lorsque je lance le site web à http://localhost/test/, Il y aura simplement montrer l'image ' échantillon.jpg' sur la page.

ALORS LE PROBLÈME ICI EST :

  • je veux empêcher l'image d'apparaître comme http://localhost/test/sample.jpg directement dans la barre d'url.

Remarque:
Après une journée d'obtention de réponses ci-dessous, j'ai trouvé que toutes les solutions fonctionnaient logiquement, mais problème avec Firefox. Je veux dire, les réponses ci-dessous donnent la solution tout en testant sur chaque navigateur mais pas avec Firefox.

57
demandé sur 夏期劇場 2012-04-20 01:02:45

4 réponses

Essayez ce qui suit:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(gif|jpg)$ - [F]

Renvoie 403, si vous accédez directement aux images, mais permet leur affichage sur site.

Note: Il est possible que lorsque vous ouvrez une page avec une image, puis copiez le chemin de cette image dans la barre d'adresse, vous pouvez voir cette image, c'est seulement à cause du cache du navigateur, en fait cette image n'a pas été chargée à partir du serveur (de Davo, commentaire complet ci-dessous).

93
répondu Ruslan Osipov 2017-02-10 17:07:07

La règle de Rosipov fonctionne très bien!

Je l'utilise sur des sites en direct pour afficher un message vide ou spécial;) à la place d'une tentative d'accès direct aux fichiers que je préfère protéger un peu de la vue directe. Je pense que c'est plus amusant qu'un 403 Interdit.

Donc, en prenant la règle de rosipov pour rediriger toute requête direct vers les fichiers {gif,jpg,js,txt} vers 'messageforcurious':

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd.*$ [NC] 
RewriteRule \.(gif|jpg|js|txt)$ /messageforcurious [L]

Je le vois comme une façon polie de refuser accès direct à, disons, un CMS fichiers sensibles comme xml, JavaScript... avec la sécurité à l'esprit: à tous ces bots griffonner le web de nos jours, je me demande ce que leur algo va faire de mon 'messageforcurious'.

22
répondu tuk0z 2013-03-27 20:43:22

Sur la base de vos commentaires, On dirait que c'est ce dont vous avez besoin:

RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC] 
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC]

J'ai testé sur mon localhost et il semble fonctionner correctement.

7
répondu anubhava 2012-04-19 21:05:55

Tout d'abord, trouvez où le fichier de configuration principal d'apache httpd.conf est situé. Si vous utilisez Debian, il devrait être ici: /etc/apache/httpd.conf. En utilisant un éditeur de fichiers comme Vim ou Nano, ouvrez ce fichier et trouvez la ligne suivante:

Options Includes Indexes FollowSymLinks MultiViews

Supprimez ensuite les index de mots et enregistrez le fichier. La ligne devrait ressembler à ceci:

Options Includes FollowSymLinks MultiViews

Après cela, redémarrez apache (par exemple /etc / init.d / Apache redémarrer dans Debian). Ça y est!

7
répondu Kaushal 2012-10-20 06:17:47