【问题标题】:Redirect all .jpg but allow image embed重定向所有 .jpg 但允许嵌入图像
【发布时间】:2017-05-25 12:58:19
【问题描述】:

我的 .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" /> 能够加载,而不是被重定向。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    无论如何,您可以通过插入条件检查来实现这一点。 IE。仅在未将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 所必需的,它不会发送 Referer爬取时的header) 比如可以试试:

    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。例如。将 ?noredirect=1 附加到 URL 的末尾并在您的 .htaccess 条件中检查此内容:

    RewriteCond %{QUERY_STRING} !^noredirect=1$
    

    【讨论】:

    • 感谢您的回答,因为重定向有效,但图像不会显示在整个网站上 - 它们不会加载。所以我想这意味着它无法在我自己的网站上允许它们出现在 中。它们怎么还能加载到我的网站上?
    • 抱歉,我错过了HTTP_REFERER 检查中的方案。应该是!^http://www\.example\.com,而不是!^www\.example\.com,就像我以前那样。这应该更改为您通过其访问站点的规范方案/主机。我已经更新了我的答案。
    • 太棒了!这似乎有效。但是,当我来自图像时,来自谷歌图像搜索,它会重定向,但图像不会加载到页面上,在我的网站上。为什么?你能告诉我如何让 Googlebot 看到图像吗?什么例外
    • 当页面打开时,嵌入的图像应该加载到我的网站上,无论引荐来源。如果页面 (http://www.example.com/wp-content/show-image.php?path=) 在我的网站上,则应该加载图像。此重定向的目的是重定向 .jpg,当引用者将其直接发送到图像 .jpg 时,但重定向后图像应加载到页面上
    • 我已经更新了我的答案,增加了一些例外情况,希望允许来自 Google 和 Googlebot 的推荐人。请注意,这允许直接请求您的图像,但如果您想允许 Google,这是不可避免的(无论如何建议最佳做法,以免让某些用户感到沮丧)。 “......不管推荐人。” - 您可以确定图像是否“从您的网站”加载的唯一方法是检查 Referer 标头,以查看它来自您的网站。你的网站就是Referer。
    猜你喜欢
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2012-09-23
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多