我从这个开始。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
为了保护网站免受热链接盗窃,我搜索了最佳解决方案,在代码底部添加了以下代码:
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]
上面的代码是防止热链接的最常见的解决方案,这很清楚,但它不起作用:例如,当我粘贴图像的URL时
https://www.mywebsite.com/wp-content/uploads/sites/2/2018/01/imagexample.jpg
浏览器将显示图像。
代码是否有错误,或者是否有更好的解决方案?
最合适的回答,由SO网友:MrWhite 整理而成
当我粘贴图像的URL时
我想你的意思是,当你把URL直接粘贴到浏览器的地址栏上时,我想你不会把它粘贴到其他任何地方。(?)
如果是这种情况,那么您看到的行为是正确的-浏览器应该显示图像。这不是真正的“热链接”,这是一个直接请求。实际上,您无法阻止直接请求(当HTTP Referer为空时),因为您可能最终会阻止这些图像供站点的真实用户使用,而这些用户不会将HTTP Referer标头作为请求的一部分发送。
以下条件允许此请求发生:
RewriteCond %{HTTP_REFERER} !^$
即当
HTTP_REFERER
不是空的。
<小时>ASIDE: 您已经将问题标记为“多站点”,但是,您的.htaccess
文件:标准单站点和多站点?单站点代码是第一位的,所以这就是“获胜”的原因。