这几天想做个防外链的机制,试了很久才成功。参考了很多文章,我自己也转了几篇到我自己的blog上,参考:这里这里这里

就不多废话了,直接上步骤:

1. 在自己的domain文件夹下创建一个.htaccess文件,如果有的话就直接在里面做修改

2. 文件内容是:

[codesyntax lang="c"]

# 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

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?xenojoshua\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ https://lh3.googleusercontent.com/_pWN9v2AUUuw/TaVN5ixbZAI/AAAAAAAAABI/UJjvc117ui0/s144/hotlinkp.jpg [L]
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?xenojoshua\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(mp3|exe)$ - [F]
</IfModule>

[/codesyntax]

3.  我转帖的blog里也有解释具体的rewrite语句对应的逻辑,这里就不多说了,虽然转帖的基本都是英语但是也不难看懂,这里就简单说下几点要点。

  • [F]表示禁止,引用页面会得到一个403错误。
  • 外链的图片跳转地址绝对不可以是你自己的blog里的一张图片,否则引用的地址会显示一个红X,表示图片无法显示,而不是按你想的那样显示你指定的禁止外链图片。看我的.htaccess文件,外链图片的跳转地址是google的picasa相册里的一张图片。
  • 在测试外链图片是否生效的时候千万不要用你自己域名图片的地址直接贴到浏览器里测试,比如把地址/uploads/2011/04/20555701145676676.jpg直接贴浏览器里,这样图片是会一直显示出来的,无论你有没有清浏览器缓存。因为我们写的那段rewrite语句是用来检测图片是否在我们的domain之外被请求的情况,如果你直接在浏览器里打图片地址的话,图片还是在自己的domain里,就一直能显示出来(我为了这点纠结了好久,真郁闷)。

4. 最后上几张效果图: