修改.htaccess实现WordPress站内图片防盗链

本站使用的云虚拟主机,Apache服务器,未修改前的.htaccess的代码如下:

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

# END WordPress

 
fileZilla连ftp接服务器时,默认这个.htaccess文件是隐藏的。修改之前我发现为什么我的服务器根目录htdocs里没有这个文件的?网上找到一些教程,说是直接编辑好.htaccess的规则上传到服务器根目录即可。

我就尝试着照着干,规则代码如下:

# BEGIN WordPress
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !sgtfz\.cn [NC]
RewriteCond %{HTTP_REFERER} !baidu\.com [NC]
RewriteCond %{HTTP_REFERER} !so\.com [NC]
RewriteRule .*\.(jpg|png|bmp|swf|jpeg|gif)$ - [NC,F,L]
# END WordPress

但是这个对于我的网站没用!直接没有登录的访问出错造成站点不能正常访问。本身我管理员账号一直登陆着没有退出的,奇怪的是管理员是可以正常的进入后台,进入设置,查看固定连接。然后什么都没有设置,用另一个浏览器没有登录的直接访问又恢复正常访问了。

 
后来我发现这个.htaccess文件是被隐藏了,因为我的站点备份下来的文件发现有这个文件。
所以需要设置一下ftp软件,强制显示隐藏文件才显示出来。如下图:

 
这样才发现原来我编辑.htaccess规则文件的时候,漏了两行代码哟!!应该是规则的开始标签,与结束标签。

<IfModule mod_rewrite.c>

</IfModule>

所以网上找的一些资料,真的太多,太乱,太难筛选鉴别到底哪些才是对自己有用的。😭
 

现在就比较好测试了,防盗链规则编辑为如下代码。然后我们测试成功了!!

# BEGIN WordPress
<IfModule mod_rewrite.c>

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

RewriteCond %{HTTP_REFERER} !sgtfz.cn [NC]
RewriteCond %{HTTP_REFERER} !www.sgtfz.cn [NC]
RewriteCond %{HTTP_REFERER} !baidu.com [NC]
RewriteCond %{HTTP_REFERER} !www.baidu.com [NC]
RewriteCond %{HTTP_REFERER} !so.com [NC]
RewriteCond %{HTTP_REFERER} !www.so.com [NC]
RewriteRule .*\.(jpg|png|bmp|jpeg|gif)$ - [NC,F,L]

</IfModule>

# END WordPress

 
规则解释:

RewriteCond %{HTTP_REFERER} !^$ [NC]
允许空的http_referer来源,即用户浏览器手动输入访问路径的允许访问文件。这个我的规则中不允许空的http_referer
 
RewriteCond %{HTTP_REFERER} !sgtfz.cn [NC]
允许访问的站点,自己的站点必需允许的。还有后面的网址都是允许访问的站点。
 
RewriteRule .*\.(jpg|png|bmp|jpeg|gif)$ – [NC,F,L]
这是设置防止盗链的文件格式类型,后面的【-】短杠符号,是不进行重写任何网址,直接拒绝访问请求。如果需要的话可以将【-】短杠符号替换为网址,或者图片连接等。
 
直接拒绝请求的效果如下:

Forbidden

You don’t have permission to access

发表评论

电子邮件地址不会被公开。 必填项已用*标注