我正在尝试编写“最终”反热链接.htaccess ...
您可以在网上找到许多示例/教程 / 生成器,但其中许多是错误的或不完整的(或两者都是)。
这些是我要寻找的功能:
- 当HTTP_REFERER是外部站点时,必须阻止热链接以获取文件扩展名列表。
- 必须允许对当前域(duh)进行热链接,而不必在.htaccess中对其进行编码。
- 对于当前域,它必须在http和https下运行。
- 对于当前域,它必须与www一起使用,而不能与www一起使用。
- 必须能够将例外域添加到这些规则中(例如我们的朋友Google),并且这些域必须在http和https下以及带有www或不带有www的情况下工作。
到目前为止,这是我实现的目标:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?mydomain.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com/.*$ [NC]
RewriteRule \.(gif|jpe?g|png|zipx?)$ - [NC,F]
</IfModule>
我的问题:
- 如何避免
mydomain.com
在.htaccess中进行硬编码?(能够将这个.htaccess部署到我所有的域中而不必为每个域都进行修改,那就太好了。) - 在我的RewriteRule中,
gif|jpe?g|png|zipx?
等效gif|jpg|jpeg|png|zip|zipx
吗?(对不起,正则表达式仍然很新。) - 您是否发现我不知道的.htaccess中有什么不好的东西?
对于#1,我知道这是有可能的。我找到的最接近的代码段是从URL中删除www而不对域进行硬编码的代码段。有没有办法对我的问题1使用此方法?
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteCond %{HTTPS}s/%1 ^(on(s)|offs)/(.+)
RewriteRule ^ http%2://%3%{REQUEST_URI} [L,R=301]
更新:
我知道可以使用带水印图像而不是常规图像的解决方案。但是我不是在寻找这种解决方案。我想要一个通用解决方案(服务403错误),适用于所有类型的二进制文件(zip,exe,iso,jpg,png,gif ...)。