重定向所有.jpg但允许图像嵌入

时间:2017-01-10 21:43:11

标签: .htaccess redirect mod-rewrite url-rewriting

我的.htacess文件中有此代码,并将http://www.example.com/wp-content/wp-content/uploads/2016/10/063.jpg重定向到www.example.com/wp-content/show-image.php?path=http://www.example.com/wp-content/wp-content/uploads/2016/10/063.jpg

不知何故,它有效,并且它也不会重定向www.example.com/wp-content/show-image.php?path=http://www.example.com/wp-content/wp-content/uploads/2016/10/063.jpg

 RewriteEngine On
RewriteRule ^([^\.]+)\.(jpe?g|png) http://www.example.com/wp-content/show-image.php?path=http://www.example.com/wp-content/$1.jpg [R=301,NC,L]

问题是它还会在<img src=""/>中重定向图像。我希望<img src="http://www.example.com/wp-content/wp-content/uploads/2016/10/063.jpg" />能够加载,而不是重定向。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

真正做到这一点的唯一方法是在不修改URL的情况下检查HTTP Referer。 Referer未设置为直接请求,但在请求来自嵌入式src属性时设置(到您的域)。

但是,这很容易出错,因此不建议在专业环境中使用。浏览器可能被配置为无论如何都不在请求中发送Referer,甚至可能是伪造的。

无论如何,您可以通过插入条件检查来实现此目的。即。仅在Referer未设置为预期主机时重定向:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://www\.example\.com
RewriteRule ^([^\.]+)\.(jpe?g|png) http://www.example.com/wp-content/show-image.php?path=http://www.example.com/wp-content/$1.jpg [R=301,NC,L]

!前缀否定 CondPattern

但是,除非您包含其他例外,否则这也会阻止Googlebot等查看您的图片网址。 更新并且通常建议允许空的Referer标头,但这会允许直接请求(但这可能是Google图片搜索和Googlebot不需要发送{抓取时标头{1}}例如,您可以尝试:

Referer

(顺便说一句,你不需要在字符类中转义点以匹配文字点。)

这将阻止其他网站直接链接到您的图片(即。热链接)。

修改网址:

否则,您可以通过某种方式更改嵌入图像的URL。例如。将RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !google RewriteCond %{HTTP_REFERER} !^http://www\.example\.com RewriteRule ^([^.]+)\.(jpe?g|png)$ http://www.example.com/wp-content/show-image.php?path=http://www.example.com/wp-content/$1.jpg [R=301,NC,L] 附加到网址末尾,然后在?noredirect=1条件中检查此内容:

.htaccess