Проблема:
недавно столкнулся с такого вида проблемой - например, существует в теле документа ссылка
<a href="link.html">link</a>
при переходе на
http://domen/parent/doc.html (использованы ЧПУ), получается так, что ссылка теперь ссылается не на
http://domen/link.html, а на
http://domen/parent/link.html. Поэтому ссылка становится неверной.
При этом под этот глюк попадают:
<link bla-bla-bla href="link" bla-bla-bla />
<img bla-bla-bla src="link" bla-bla-bla />
<a bla-bla-bla href="link" bla-bla-bla>bla-bla-bla</a>
<script bla-bla-bla src="link" bla-bla-bla/>
<script bla-bla-bla src="link" bla-bla-bla></script>
Решение:
указать в head такое:
<base href="http://domen/" />
P.S. Сначала я решил эту проблему с помощью регулярных выражений:
<?php
ob_start();
?>
HTML_HERE
<?php
$OutputBuffer = ob_get_contents();
$OutputBuffer = preg_replace('/<(img|script) (.*?)src=(["\'])(?!http:\/\/)\/?(.*?["\'].*?)>/s','<$1 $2src=$3http://domen/$4>', $OutputBuffer);
$OutputBuffer = preg_replace('/<a (.*?)href=(["\'])(?!http:\/\/)\/?(.*?["\'].*?)>(.*?)<\/a>/s','<a $1href=$2http://domen/$3>$4</a>', $OutputBuffer);
$OutputBuffer = preg_replace('/<link (.*?)href=(["\'])(?!http:\/\/)\/?(.*?["\'].*?)>/s','<link $1href=$2http://domen/$3>', $OutputBuffer);
ob_end_clean();
echo $OutputBuffer;
?>
Как видите - зря было потеряно время на написание регулярки, также было потеряно процессорное время сервера. Однако это лишний повод потренироваться в регулярке )) Однако это тоже работает ))
Призываю всех - искать красивые, короткие решения! И проверять их!