我没有找到这个问题的明确答案(但确定HTML标签比它的价值更麻烦。)
当您在网站上使用多个目录时,如何在更改当前目录时确保与站点其余部分的相关链接有效?当我转到支持目录时,我不希望我的“/index.php”链接实际链接到“/support/index.php”。
我们正在使用PHP,因此我可以使用输出缓冲来更改链接,但我想看看其他人是否有任何好主意。也可以通过Smarty以某种方式实现它。我没有从头开始构建一个使用多个目录的网站,因为我不知道一个简单的方法来解决这个问题,但问题不应该太困难。
(在IIS上运行,但显然最好让它在任何服务器上运行。)
答案 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"]).'/">';
?>