Лучшие практики с несколькими каталогами в HTML - PullRequest
0 голосов
/ 02 августа 2010

Я не нашел четкого ответа на этот вопрос (но определил, что тег HTML - это больше проблем, чем стоит).

Когда вы работаете с несколькими каталогами на веб-сайте, как выУбедитесь, что относительные ссылки на остальную часть вашего сайта работают, когда вы меняете текущий каталог?Я не хочу, чтобы моя ссылка на «/index.php» фактически указывала на «/support/index.php» при переходе в каталог поддержки.

Мы используем PHP, поэтому я мог бы использоватьбуферизация вывода для изменения ссылок, но я хочу посмотреть, есть ли у других хорошие идеи.Также мог бы реализовать это через Smarty тем или иным способом.Я не создавал веб-сайт с нуля, который бы использовал несколько каталогов, просто потому, что я не знаю простого способа справиться с этим, но проблема не должна быть слишком сложной.

(Работа на IIS, но, очевидно, было бы лучше, чтобы он работал на любом сервере.)

Ответы [ 4 ]

4 голосов
/ 02 августа 2010

вы можете объявить переменную base_url или объявить константу, содержащую ваш базовый URL

, например

DEFINE('BASE_URL', 'http://example.com/');

при использовании ссылок

, например

<a href="<?php echo BASE_URL; ?>index.php">Home</a>
1 голос
/ 02 августа 2010

У вас уже есть все необходимое

как сделать так, чтобы относительные ссылки на остальную часть вашего сайта работали при смене текущей директории?

мы используем абсолютные ссылки для этого

Я не хочу, чтобы моя ссылка на "/index.php" фактически указывала на "/support/index.php" при переходе в каталог поддержки.

К счастью, этого никогда не произойдет

/index.php - это абсолютный путь и никогда не будет указывать ни на что, кроме /index.php.

/ не только для украшения. Значение слеша в начале пути - «корневой каталог». Итак, /index.php означает index.php placed in the root directory.
/support/index.php означает index.php placed in the support directory which is placed in the root
очень просто. просто всегда используйте абсолютный путь (не URL, который не имеет смысла)

0 голосов
/ 02 августа 2010

Я храню «базовый» URI в двух местах: (i) на сервере PHP / Zend Framework мой файл configuration.xml содержит обычные значения, такие как URI; (ii) на стороне клиента более мелкий скрытый <form/> содержит другие (менее угрожающие безопасности) значения, такие как базовый URI.

Форма, кстати, выглядит примерно так:

<form id="AppSettings" action="#">
    <input type="hidden" id="MyBaseUri" value="http://superuser.com"/>
</form>
0 голосов
/ 02 августа 2010

Добавьте <base href="http://www.domain.com/"> к вашему тегу <head>.Это приведет к тому, что все относительные ссылки начнутся с каталога, указанного как href.Затем используйте относительные ссылки, например support/index.php, не начинающиеся с / (то есть, не /support/index.php)

Примечание : сделайте тег <base> первым тегом в разделе <head>, так как все ссылки после этого будут интерпретироваться из этого базового каталога.(Например, <link href="relative/path"> уже будет использовать базовый каталог, если он определен выше.

Преимущество : вы можете переместить всю страницу в подкаталог, например <a href="http://www.domain.com/page" rel="nofollow noreferrer">http://www.domain.com/page</a>, и вам нужно только изменитьТег <base>. Если вы используете ссылки типа /support/index.php, они всегда будут начинаться с корневого каталога (т. Е. <a href="http://www.domain.com/" rel="nofollow noreferrer">http://www.domain.com/</a>)

Динамический базовый каталог для перезаписи URL :

<?php
    if  (preg_match("/https/i",$_SERVER["SERVER_PROTOCOL"]))
        $protocol = "https";
    else
        $protocol = "http";
    echo '<base href="'.$protocol.'://'.$_SERVER["HTTP_HOST"].dirname($_SERVER["SCRIPT_NAME"]).'/">';
?>
...