反图像链接(自定义正则表达式)

时间:2012-12-06 18:48:23

标签: regex .htaccess hotlinking

我想设置一个正则表达式,禁止不以下列模式结尾的图像的热链接:-200.jpg

“200”实际上可以是“150”或“250”或100-999之间的任何数字(也就是说3个字符)。 .jpg可以是.jpeg或.png,允许.gif的热链接。

我从这样的事情开始:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(.+\.)?mywebsite\.com/ [NC]
RewriteRule [^0-9]{3}\.(jpe?g|png)$ /img/hotlink.gif [NC,R,L]

例如:应该允许: h*ttp://mywebsite.tld/dir/dir/hello_sdfk456er_142.jpg-200.jpg但应拒绝此项:h*ttp://mywebsite.tld/dir/dir/hello_sdfk456er_142.jpg

但这不起作用。

另外,请考虑以下事项:

我正在使用url_rewriting,以便显示图片的html页面就像h*ttp://mywebsite.tld/username/1337.jpg 其中1337代表数据库中图像的id。我强调这种弱点的原因是因为像:

这样的规则
RewriteRule ![0-9]{3}\.(jpe?g|png)$ /img/hotlink.gif [NC,R,L]

无效。

编辑:

我刚刚解决了一些例外情况:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(.+\.)?mywebsite\.com/ [NC]
RewriteCond %{REQUEST_URI}  !-[0-9]{3}\.(jpe?g|gif|png)$ [NC]
RewriteCond %{REQUEST_URI}  !/[0-9]+\.(jpe?g|gif|png)$ [NC]
RewriteRule \.(jpe?g|png)$  /img/hotlink.gif [NC,R,L]

如果您知道“性感”的方式,请告诉我。 非常感谢那个尝试过的人(删除了他的消息?)

2 个答案:

答案 0 :(得分:1)

您的解决方案有两个缺陷:

  1. /[0-9]+的第4行还允许热链接仅命名为200.jpg(无连字符)的图像。
  2. 缺少RewriteRule条件,因此不允许热链接.gif图片。
  3. 这是更新版本:

    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_REFERER} !^https?://(.+\.)?mywebsite\.com/ [NC]
    RewriteCond %{REQUEST_URI}  !-[0-9]{3}\.(jpe?g|gif|png)$ [NC]
    RewriteRule .* http://mywebsite.com/img/hotlink.gif [NC,R,L]
    

    您可以按如下方式阅读:

    1. 如果推荐人不为空
    2. 推荐人不是我的网站
    3. 请求的图像不以允许的图案结束(例如-123.gif)
    4. 然后显示hotlink.gif

答案 1 :(得分:0)

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(.+\.)?mywebsite\.com/ [NC]
RewriteCond %{REQUEST_URI}  !-[0-9]{3}\.(jpe?g|gif|png)$ [NC]
RewriteCond %{REQUEST_URI}  !/[0-9]+\.(jpe?g|gif|png)$ [NC]
RewriteRule \.(jpe?g|png)$  /img/hotlink.gif [NC,R,L]