-1

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

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

我们使用的是 PHP,所以我可以使用输出缓冲来更改链接,但我想看看其他人是否有什么好主意。也可以通过 Smarty 以一种或另一种方式实现它。我没有从头开始建立一个使用多个目录的网站,只是因为我不知道一个简单的方法来处理这个问题,但这个问题应该不会太难。

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

4

4 回答 4

4

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

例如

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

使用链接时

例如

<a href="<?php echo BASE_URL; ?>index.php">Home</a>
于 2010-08-02T14:53:28.657 回答
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)

于 2010-08-02T14:59:53.353 回答
0

我将“基本”URI 存储在两个位置:(i)在 PHP/Zend 框架服务器上,我的configuration.xml文件保存常规值,例如 URI;(ii) 在客户端,一个更浅的、隐藏的<form/>持有其他(安全性更小的)值,例如基本 URI。

顺便说一下,表格看起来像这样:

<form id="AppSettings" action="#">
    <input type="hidden" id="MyBaseUri" value="http://superuser.com"/>
</form>
于 2010-08-02T18:17:01.717 回答
-1

添加<base href="http://www.domain.com/">到您的<head>标签。这将使所有相对链接从给定的目录开始href。然后使用不以(即 not )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/

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"]).'/">';
?>
于 2010-08-02T15:07:34.777 回答