HTML / PHP: как обрабатывать абсолютные URL-адреса? - PullRequest
1 голос
/ 22 апреля 2010

Безопасен ли тег html <base> для поддержки браузера? Или я должен сгенерировать корневой путь с помощью PHP, который я затем добавлю вот так <a href="<?=BASE?>somepage.html">somepage</a>, который составляет абсолютный URL.

используя базовый тег, подобный этому <base href="<?=BASE?>" /> Затем я могу использовать ссылки типа этого

<a href="somepage.html">somepage</a>

теперь я полностью осознаю, что было бы гораздо проще сделать это без использования базового тега:

<a href="/somepage.html">somepage</a>

но как мне выполнить локальное тестирование с базовым URL-адресом http://localhost/testsite/ ???

редактирование: спасибо, ребята, вы те люди, которые делают сообщество stackoverflow таким замечательным:)

Ответы [ 4 ]

1 голос
/ 02 октября 2012

Возвращаясь к этому вопросу 2 года спустя, теперь я понимаю, что лучший способ обработки абсолютных URL-адресов - поместить URL-адрес в функцию-оболочку, например, так:

<a href="<?php echo url('/somepage.html');?>">somepage</a>

функция-обертка дает вам полный контроль над обработкой URL

function url($url){
    if(strpos($url,'/')===0){
        return 'http://localhost/testsite'.$url;
    }else{
        return $url;
    }
}
1 голос
/ 22 апреля 2010

Мой совет - использовать абсолютные URL-адреса, начинающиеся с косой черты, и просто настроить виртуальный хост, который использует /localhost/testsite/ в качестве корня документа. Тогда вы можете оставить абсолютные URL-адреса и просто получить доступ к своему сайту с адресом http://testsite/ локально.

1 голос
/ 22 апреля 2010

Вы определенно подумали об этом, но я хотел бы добавить еще одно соображение к миксу.Если вы пишете веб-приложение, вы должны сконструировать его таким образом, чтобы в будущем вы могли установить его в любой подкаталог, и он продолжит работать без особых изменений.

Это означает, что заголовки href, src, action и даже HTTP Location должны быть в курсе таких изменений.Вот почему я рекомендую добавлять к вашему Uri <?php echo SITE_BASE ?> или как вы хотите его называть.

Может начаться дискуссия о том, должен ли SITE_BASE содержать завершающий слеш.

1 голос
/ 22 апреля 2010

Мне нравится первый вариант, вывод базового каталога в тегах PHP

<a href="<?=BASE?>somepage.html">somepage</a>

самое лучшее. Это делает ваш сайт независимым от того, в каком каталоге он установлен (вы не сможете изменить настройки виртуального хоста в пакетах общего хостинга). Также легко перенести файлы изображений на другой сервер / поддомен, если потребуется.

<base> безопасно использовать с точки зрения поддержки браузера, но я лично настоятельно рекомендую не использовать его из-за удобства сопровождения кода. <base> изменяет правила обработки URL; вам нужно помнить основу для всех относительных URL; и очень легко пропустить. С точки зрения программирования это выглядит как грязное исправление.

...