We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 31213
    • 153 Posts
    Проблема:
    недавно столкнулся с такого вида проблемой - например, существует в теле документа ссылка

    <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;
    ?>
    


    Как видите - зря было потеряно время на написание регулярки, также было потеряно процессорное время сервера. Однако это лишний повод потренироваться в регулярке )) Однако это тоже работает ))
    Призываю всех - искать красивые, короткие решения! И проверять их!
    • Если я правильно понял данную проблему, то она уже давно была решена:
      а) прописывать <base href="http://domen/" /> в HEAD [у меня это приводило к глюкам в IE6 ввиде того, что не было возможности выделить текст] и/или
      б) прописывать ссылки с помощью уникальных идентификаторов <a href="[~100~]">Ссылка</a>, где 100 - номер документа, на который нужно поставить ссылку.
        Разработка сайтов и программных модулей на MODX.
        Опыт работы на MODx с 2005 года. Высокое качество.
        Компания Baltic Design Colors: http://www.bdcolors.ru.
        • 31213
        • 153 Posts
        Просмотрело больше 30 человек тему, но никто не заметил ошибки sad
        тэг link относится к фичам браузера, а никак не к файловым путям, поэтому, спасибо, Igor, что направил на путь истинный тэгом base wink И пути, кстати, так и делаются [~id~].
        Поправил шапку )