自动将URL引用从内部源更改为外部源

时间:2011-01-30 18:26:54

标签: apache .htaccess redirect lamp cdn

我想设置所有图像引用(实际上只是对特定文件夹的引用),

e.g。 mywedomain.com/images/myimage.jpg,其中mywebdomain.com/images/myimage.jpg实际上指向mycdn.com/images/myimage.jpg

但是在代码/标记本身中保留内部引用。我想知道如何处理这个问题?

THX!

1 个答案:

答案 0 :(得分:0)

这取决于它是否在同一台服务器上,而不是你应该如何处理它。

如果它位于同一台服务器上,并且位于文档根目录中,则使用mod_rewrite进行重写最简单。

在主目录.htaccess文件中:

RewriteEngine on
RewriteBase /

RewriteRule ^/images/(.+)$ /mycdn.com/images/$1 [L]

如果它不在文档根目录中,或者在其他服务器上,则重定向可能更容易。

RedirectMatch ^/images/(.+)$ http://mycdn.com/images/$1 

虽然这在客户端会很明显,但如果他们正在查看请求日志。如果您希望它是透明的,那么您可以在服务器上代理请求。

创建一个PHP文件(或你使用的其他语言,你提到LAMP,因此PHP)。

<?php

$reqImage = $_GET['image'];
$mimeTypes = array('gif' => 'gif', 'jpg' => 'jpeg', 'jpeg' => 'jpeg',
                   'png' => 'png');

$matches = array();
if (preg_match("/^[-a-zA-Z0-9_]+\.(gif|jpg|png)$/", $reqImage, $matches)) {
   header('Content-Type: image/' . $mimeTypes[$matches[1]]);
   @readfile("http://mycdn.com/images/" . $reqImage);
} else {
   header('HTTP/1.0 404 Not Found');
}

exit;

请注意,在提供图像时需要传递Internet media type,因为Apache期望与PHP文件不同,并且通常会为您处理。