3

最近谷歌改变了图像搜索,结果大部分流量点击查看原始图像并将它们发送到直接图像文件。

如果他们单击图像文件,我已经更改了我的 .htaccess 并停止所有热链接并重定向到我的主页。

最近我也尝试过是否可以重定向到图片所在的帖子或页面。

通过以下代码

<?php 
require('../wp-blog-header.php');
$imageURL = strip_tags( $_GET['id'] );
if imageURL!== "") {    
  $query = "SELECT ID FROM $wpdb->posts WHERE post_type = 'attachment'AND post_parent > '0' AND guid = '$imageURL'";    
  $linkedImage = $wpdb-get_row($query);    
  $attachmentUrl = get_attachment_link($linkedImage->ID);    
  if($attachmentUrl !== "" && !is_numeric(stripos($attachmentUrl, "attachment_id=0"))) {
    header("HTTP/1.1 302 Found");        
    header("Location: ". $attachmentUrl);        
    exit;    
  }
}
$newUrl = get_site_url() . "/image-not-found";
header("HTTP/1.0 404 Not Found");
header("Location: " . $newUrl);
exit;
?>

但它重定向到http://www.mydomain.com/?attachment_id=

id 为 nil 或无法获取正确的 id

我在 Wordpress CMS 版本 3.5.1 中的网站

任何人都可以帮助如何重定向到正确的附件页面以获取 .jpg 文件直接请求。

提前致谢

4

1 回答 1

0

仅当请求的 URL 上有一个与图像 URL 完全匹配的 ID 参数时,您的代码才有效,例如http://www.example.com/?id=http://www.example.com /uploads/Some-Image.jpg

是这样吗?即便如此,你也不应该使用它,id因为它是 WP 中其他东西的保留参数。在您的 .htaccess 中,您应该将http://www.example.com/uploads/Some-Image.jpg重定向到,例如http://www.example.com/?image_redirect=http://www.example .com/uploads/Some-Image.jpg。然后使用$imageURL = $_GET['image_redirect'].

其他注意事项:strip_tags不会使字符串安全地用作 SQL 查询。在 WordPress 中,您可以esc_sql($string)做到这一点。另外,您应该使用if ( $imageUrl != '' ),而不是 with !==。第 5 行有一个错误,它应该说$wpdb->get_row,你当前有一个减号。我认为这些是错别字。最后,您不应该使用Location:带有状态码 404 的标头。

于 2013-11-03T21:34:59.890 回答