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

.htaccess 重定向所有.jpg,但允许图像嵌入,.htaccess,redirect,mod-rewrite,url-rewriting,.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?路径=http://www.example.com/wp-content/wp-content/uploads/2016/10/063.jpg 不知何故,它工作正常,并且不会重定向www.example.com/wp content/s

我的.htacess文件中有此代码,并执行
http://www.example.com/wp-content/wp-content/uploads/2016/10/063.jpg
www.example.com/wp content/show image.php?路径=http://www.example.com/wp-content/wp-content/uploads/2016/10/063.jpg

不知何故,它工作正常,并且不会重定向
www.example.com/wp content/show image.php?路径=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]
问题是它还会重定向
中的图像。我希望
能够加载,而不是重定向


有没有办法做到这一点?

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

但是,这很容易出错,不建议在专业环境中使用。浏览器可能被配置为无论如何都不会在请求中发送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

然而,这也将阻止谷歌机器人等看到你的图片URL,除非你包括进一步的例外情况更新:通常建议允许空的
Referer
标题,但这将允许直接请求(但这可能是谷歌图像搜索和谷歌机器人所必需的,它在爬行时不发送
Referer
标题)。例如,您可以尝试:

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]
(顺便说一句,为了匹配文字点,不需要转义字符类中的点。)

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

修改URL: 否则,您可以通过某种方式更改嵌入图像的URL。例如,将
?noredirect=1
附加到URL的末尾,并在
.htaccess
条件中进行检查:

RewriteCond %{QUERY_STRING} !^noredirect=1$

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

但是,这很容易出错,不建议在专业环境中使用。浏览器可能被配置为无论如何都不会在请求中发送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

然而,这也将阻止谷歌机器人等看到你的图片URL,除非你包括进一步的例外情况更新:通常建议允许空的
Referer
标题,但这将允许直接请求(但这可能是谷歌图像搜索和谷歌机器人所必需的,它在爬行时不发送
Referer
标题)。例如,您可以尝试:

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]
(顺便说一句,为了匹配文字点,不需要转义字符类中的点。)

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

修改URL: 否则,您可以通过某种方式更改嵌入图像的URL。例如,将
?noredirect=1
附加到URL的末尾,并在
.htaccess
条件中进行检查:

RewriteCond %{QUERY_STRING} !^noredirect=1$

感谢您的回答,因为重定向是有效的,但是图像不会显示在整个网站上-它们不会加载。所以我想这意味着它不能允许他们进入我自己的网站。他们怎么还能在我的网站上加载?对不起,我错过了
HTTP\u REFERER
检查中的方案。应该是
^http://www\.example\.com
,而不是
^www\.example\.com
,正如我之前所做的那样。应将其更改为访问站点的规范方案/主机。我已经更新了我的答案。太好了!这似乎奏效了。但是,当我从一个图像,从谷歌图像搜索,它会重定向,但图像不会加载到页面上,在我的网站上。为什么?你能告诉我如何让谷歌机器人看到这些图片吗?当页面打开时,无论推荐人是谁,嵌入的图像都应该加载到我的网站上。如果页面(
http://www.example.com/wp-content/show-image.php?path=
)在我的网站上,应加载图像。这个重定向的目的是重定向.jpg,当推荐人直接将它发送到image.jpg时,但是重定向后图像应该加载到页面上。我已经更新了我的答案,还有一些例外,希望允许来自谷歌和谷歌机器人的推荐人。请注意,这允许直接请求您的图像,但如果您想允许Google,这是不可避免的(为了不让某些用户感到沮丧,这是推荐的最佳做法)。“…不考虑引用者。”-确定图像是否“从您的网站”加载的唯一方法是检查引用者标题,查看它是否来自您的网站。你的网站就是推荐者。谢谢你的回答,因为重定向是有效的,但是图像不会显示在整个网站上-它们不会加载。所以我想这意味着它不能允许他们进入我自己的网站。他们怎么还能在我的网站上加载?对不起,我错过了
HTTP\u REFERER
检查中的方案。应该是
^http://www\.example\.com
,而不是
^www\.example\.com
,正如我之前所做的那样。应将其更改为访问站点的规范方案/主机。我已经更新了我的答案。太好了!这似乎奏效了。但是,当我从一个图像,从谷歌图像搜索,它会重定向,但图像不会加载到页面上,在我的网站上。