看了标题大家可能、也许、差不多、没准知道我要写什么了:windows 主机下图片防盗链设置。
自己网站空间、流量都有限,如果被别人盗链了图片,那你还怎么接着往下玩?!这是绝对不行滴!
网上有各种关于图片防止被盗链的设置方法,但大都基于 Apache 主机,可谓天下文章一大抄,原创的很少,而且有的还有错误!
那么,windows 主机 IIS 和 MySQL 数据库下如何设置?其实你完全可以在主机商的后台设置,因为大多数 windows 主机后台都会有防盗链设置。
但问题来了:如果我自己想单独设置类别,怎么弄呢?其实你完全可以在自己的网站根目录建立一个 web.config 的文件,在里面设置图片访问的白名单。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
不废话了,开始说正事
平台:windows 主机 + IIS 7.5(及以上) + MySQL 数据库
首先,你的主机服务器需要支持 IIS 重写模块。如果自己的是独立主机,建议你到微软官网下载(有 64位 和 32位 之分,注意区别);如果是虚拟服务器,主机商一般都已经安装好了这个模块。
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
一、对于独立主机:
1. 打开 IIS 服务设置,里面有 URL 重写 功能,将其打开,如图所示:
2. 在“入站规则”中选择添加“空白规则”,如图所示:
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2024. All Rights Reserved
3. 编辑入站规则
- “名称”一栏可以自己写,但不要与其他命名重复。
- 在“匹配 URL”选项中:选择“与模式匹配”、“正则表达”。
- “模式”一栏即是你不希望被盗链的图片后缀名: ^.*\.(gif|jpg|jpeg|png)$
- 勾选“忽略大小写”
本文禁止无授权转载 - 时光在路上 www.timezls.com 保留所有权利
4. 继续下面的操作
在“操作类型”一栏选择:重写
“重写 URL”一栏填写你想让对方看到的网页、图片或其他文件地址: /tatic/image/common/logo.png 这个可以根据需要自己定义。
保存后会形成一个文件夹,在文件夹里面添加具体的内容。见下一步操作。
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2024. All Rights Reserved
5. 添加条件
- 在“条件输入”一栏中添加 :{HTTP_REFERER}
- 在“检查输入字符串是否”一栏中选择:与模式不匹配
- 在“模式”一栏输入你的域名 和/或 你想添加的域名: ^http://(.*\.)?(timezls\.com)/.*$
点击确定后,查看网站根目录的 web.cofig 文件(提醒大家不要用记事本、微软word或者写字板编辑,要用专业一点的代码编辑软件来整理代码)。
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2024. All Rights Reserved
大功告成?你想少了!测试后发现 然而并没有卵用!
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2024. All Rights Reserved
因为你少了点什么设置?看下图:
你的重写设置并没有生效,处于“False”状态。
你需要改写一下 web.config 文件中的设置。
那么好啦,说一下不具有独立主机服务器的网站怎么设置代码。
二、虚拟主机直接设置
通过上面的设置,大家可能已经对 IIS 重写设置有了一些了解。虚拟主机无法对上面这些操作,但是你可以通过设置并更改 web.config 里面的代码来实现同样的效果。
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2024. All Rights Reserved
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2024. All Rights Reserved
前面我提到:为什么设置以后不生效呢?因为你没有加 stopProcessing="true" 这一项!
web.config 文件中大概的代码框架是这样的:
- <system.webServer>
- <rewrite>
- <rules>
- <rule>
- 其他的规则设置,不用管
- </rule>
- <rule>
- 其他的规则设置,不用管
- </rule>
- <rule>
- 你的防盗链设置,代码放到这里
- </rule>
- </rules>
- </rewrite>
- </system.webServer>
你只需要在相应位置填写 <rule>代码</rule> 即可
最终代码如下:
- <rule name="Prevent image hotlinking">
- <match url="^.*\.(gif|jpg|jpeg|png)$" ignoreCase="true" stopProcessing="true" />
- <conditions>
- <add input="{HTTP_REFERER}" pattern="^http://(.*\.)?(timezls\.com)/.*$" negate="true" />
- </conditions>
- <action type="Rewrite" url="/static/image/common/logo.png" />
- </rule>
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2024. All Rights Reserved
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2024. All Rights Reserved
这回保存后上传到根目录试试看?应该没问题了吧?
其他一些问题
1. 为什么windows 主机后台有了 防盗链设置而又自己去设置web.config文件?
因为你用了 CDN 加速。CDN 加速是挺好的,但是也会带来一些问题:比如, 如果完全使用 html 页面静态化以后,广告代码分不清是 pc 端 还是 wap 端,导致代码乱投放(这个是后话,以后慢慢写);再比如这个防盗链功能,主机商后台面板无法对 CDN 服务器、域名设置白名单,如果你在主机商控制面板中开启了防盗链,用户通过 CDN 服务器浏览网站时会出现打不开图片的状况。不用 CDN 的站长其网站就没有这种情况发生。所以这也是我写此文章的主要目的:找到一个解决办法,将 CDN 等一些需要的服务器、网站加入到白名单中。
上面这段话略去,CDN 加速后自己设置 web.config 也无用,只能到 CDN 服务商那里去设置防盗链,如果碰到的服务商不给你设置防盗链(或者图片防盗链),你也没有办法。所以,自己 用 web.config 玩,前提条件是不用 CDN 加速。
我们期待国内的 CDN 企业解决目前一些存在的问题,让 CDN 加速越来越快,体验越来越好。
2. web.config 文件防盗链的其他设置
利用 web.config 文件,你可以有其他设置方面的选择,上面说的是 重写功能,你可以选择 禁止浏览,比如使用 403 或 301 功能。可以写的内容很多,有兴趣的朋友可以自己研究一下的。