HTML中多个目录的最佳实践

时间:2010-08-02 14:48:19

标签: php html templates base

我没有找到这个问题的明确答案(但确定HTML标签比它的价值更麻烦。)

当您在网站上使用多个目录时,如何在更改当前目录时确保与站点其余部分的相关链接有效?当我转到支持目录时,我不希望我的“/index.php”链接实际链接到“/support/index.php”。

我们正在使用PHP,因此我可以使用输出缓冲来更改链接,但我想看看其他人是否有任何好主意。也可以通过Smarty以某种方式实现它。我没有从头开始构建一个使用多个目录的网站,因为我不知道一个简单的方法来解决这个问题,但问题不应该太困难。

(在IIS上运行,但显然最好让它在任何服务器上运行。)

4 个答案:

答案 0 :(得分:4)

你可以声明一个base_url变量,或者声明一个包含你的基本URL的常量

e.g。

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

使用链接时

e.g。

<a href="<?php echo BASE_URL; ?>index.php">Home</a>

答案 1 :(得分:1)

你已经拥有了所需的一切

  

在更改当前目录时,如何确保与网站其余部分的相关链接有效?

我们正在使用绝对链接

  

当我转到支持目录时,我不希望我的“/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)

答案 2 :(得分:0)

我将“基本”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>

答案 3 :(得分:-1)

<base href="http://www.domain.com/">添加到您的<head>代码中。这将使所有相对链接从作为href给出的目录开始。然后使用support/index.php之类的相对链接,而不是以/开头(即不是/support/index.php

注意:将<base>标记设为<head>部分中的第一个标记,因为此后的所有链接都将从该基础目录解释。 (例如<link href="relative/path">如果已在上面定义,则已经使用基础目录。

优势:您可以将整个页面移至http://www.domain.com/page这样的子目录,只需更改<base>标记即可。如果您使用/support/index.php之类的链接,它们将始终从根目录开始(即http://www.domain.com/

网址的动态基础目录重写

<?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"]).'/">';
?>