web-dev-qa-db-fra.com

Comment éviter les hyperliens avec htaccess dans Wordpress et pourquoi l'utilisation la plus courante à ce sujet ne fonctionne pas?

J'ai commencé avec cette configuration .htaccess:

Options -Indexes
<files wp-config.php>
order allow,deny
deny from all
</files>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

# END WordPress

et pour protéger le site Web contre le vol avec hotlink, j'ai cherché la meilleure solution en ajoutant ce code au bas du code:

RewriteEngine on
RewriteCond %{REQUEST_URI} !hotlinking\.png$
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mywebsite\.com [NC]
RewriteRule \.(jpe?g|png|gif)$ /hotlinking.png [NC,L]

Le code ci-dessus est la solution la plus courante pour éviter les hyperliens. C'est très clair, mais ça ne marche pas: quand je colle l'URL de l'image, par exemple

https://www.mywebsite.com/wp-content/uploads/sites/2/2018/01/imagexample.jpg

le navigateur montre l'image.

Le code contient-il une erreur ou existe-t-il une meilleure solution?

3
Rox

quand je colle l'URL de l'image

Je suppose que vous voulez dire quand vous collez l'URL directement dans la barre d'adresse du navigateur, car je ne pense pas que vous le colliez ailleurs. (?)

Si tel est le cas, le comportement que vous observez est correct: le navigateur devrait afficher l'image. Ce n'est pas vraiment "hotlinking", c'est une demande directe. Vous ne pouvez pas bloquer de manière réaliste les demandes directes (lorsque le référent HTTP est vide), car vous pourriez bloquer ces images pour les utilisateurs réels de votre site qui n'envoient pas l'en-tête HTTP Referer dans le cadre de la demande.

La condition suivante est ce qui permet à cette demande de se produire:

RewriteCond %{HTTP_REFERER} !^$

c'est à dire. Lorsque le HTTP_REFERER est pas vide.


ASIDE: Vous avez tagué votre question "multisite", cependant, vous semblez avoir les deux ensembles de code dans votre fichier .htaccess: site standard et site unique? Le code à site unique est le premier, c’est donc ce qui est "gagnant".

2
MrWhite