我有一个使用MVC的PHP站点,它为大多数请求动态构建HTML。 我正在更新我的网站以在无Cookie域上托管图像/静态内容。 目前,images / css是作为相对URL的链接写出来的。
我现在能想到的最好的方法是更改写出<img>
标签和css链接的所有html,以使用PHP函数,该函数使用无Cookie域而不是相对URL插入绝对URL。但是,这需要对代码进行大量更改,并且可能会遗漏一些标记/链接。
有关更好的方法处理此问题的任何建议吗?
答案 0 :(得分:1)
HTML
<base>
关于子页面?如果您没有HTML的任何静态部分,我不知道
答案 1 :(得分:1)
你可能(如果你很懒)做这样的事情:
在请求开始时(第一个文件的顶部):
ob_start('parseImages');
然后声明函数:
function parseImages($data, $status) {
static $body = '';
switch ($status) {
case PHP_OUTPUT_HANDLER_START:
case PHP_OUTPUT_HANDLER_CONT:
$body .= $data;
return '';
break;
case PHP_OUTPUT_HANDLER_END:
$body .= $data;
$dom = new DomDocument();
$dom->loadHtml($body);
$imgs = $dom->getElementsByTagName('img');
foreach ($imgs as $img) {
$src = (string) $img->getAttribute('src');
if (substr($src, 0, 4) != 'http') {
//internal link
$src = 'http://my.cookieless.com/' . ltrim($src, '/');
$img->setAttribute('src', $src);
}
}
return $dom->saveHtml();
}
}
答案 2 :(得分:0)
sed解决方案:
在所有html文件上使用sed。您可以使用PHP(或脚本函数)遍历所有文件。 glob对此很有用。
<?php
// this sed assumes you have
// <img src="imgs/example.png" />
// and want to change it to
// <img src="http://www.noCookies.com/imgs/example.png" />
// Loop through each .html file in current directory and create an .html2
// If satisfied w results can finalize .html2 files
// I use .html2 so you don't overwrite your original files
foreach (glob("*.html") as $file)
{
// You have to escape double quotes
$lookFor = 'src=\"imgs';
$replaceWith = 'src=\"http://www.noCookies.com/imgs';
// create the sed command:
// _g is to do a global search
$shellCommand = "sed s_{$lookFor}_{$replaceWith}_g {$file}";
// create a NEW file and open it
$fp = fopen("{$file}2", "w");
// preform sed and write it to the new file
fwrite($fp, shell_exec($shellCommand));
fclose($fp);
}
?>
编辑 - 原始答案如下: 另一个选项,可能与原始的一样慢或慢,是mod重写
如果您运行Apache,并且所有图像都在一个单独的文件夹中(即使它们不是,但它更多的工作),您可以使用mod_rewrite ......这样的东西......?我对mod_rewrite有点生疏,但你想采取相对路径,并用绝对路径切换它:
RewriteEngine on
RewriteRule ^media/images/(.*) http://noCookies.com/media/images/$1 [L]
我认为这绝对是顺便说一下的。然后你可以随着时间的推移慢慢改变旧的img源。或者只保留旧的,并为您添加的任何新图像添加正确的img src。
以下是mod_rewrite documenation,它有点不透明...... tutorials on preventing image hotlinking中的一些也可能会有所帮助