2010-07-14 74 views
3

在我的PHP脚本中,我创建了一个常量变量,它定义了要放在超链接中的基础URL,但是我真的需要这个吗?超链接开始斜杠?

这里是我的意思的一个例子。

我有这样的:

// base url is only defined once and reused throughout 
define("__BASE_URL","http://localhost/test1/"); 
print '<a href="'.__BASE_URL.'index.php?var1=open/>Open</a>'; 

(我在我的剧本很多,这些散布的。)

我想这和它的作品:

print '<a href="index.php?var1=open/>Open</a>'; 

所以这方法是这样做的正确方法?我注意到第二种方法甚至可以加载图像,CSS和JavaScript文件。

回答

1

这取决于。没有__BASE_URL,您的链接将与当前文档相关。在你的情况下,这意味着index.php必须与具有index.php链接的文件在同一个目录中。

如果您有__BASE_URL,那么无论其包含文件位于何处(即不必与index.php位于同一目录中),该链接都可以工作。

另一种选择是仅使用起始斜线。那么你的链接将是相对于你的域根:

print '<a href="/index.php?var1=open/>Open</a>'; 

换句话说,上面的链接将指向http://localhost/index.php

0

这听起来像你的问题是关于绝对与相对URL。你想要可移植性吗?通常最好使用相对URL,特别是如果您计划在测试环境中工作,然后再将文件传输到生产环境。

3

这真的归结为你如何构建你的网站。相对URL非常好(通过做href="index.php"你真的在说href="./index.php"),但是当你开始将页面分布到多个目录时,它们可能开始变得混乱。

个人而言,我喜欢将所有相对URL都放在根目录下,这意味着我的所有URL都以斜杠('/')开头。这样,无论我的脚本是在/还是/ admin,这都没关系,因为我将始终有一个常量参考点 - 文档根目录 - 而不是结构中的某个相对目录。

您的第一个例子是,将文档路径存储在变量中,当您开始开发您希望路径可配置的较大系统时,它真的开始派上用场。例如,也许你希望你的系统管理员能够定义从哪里获取图像,或者缓存下载的位置。

所以真的考虑你的用例和系统的大小。

另外请记住,如果您曾经将脚本移动到另一个服务器,您的URL和目录结构可能会更改,这可能会造成严重破坏(例如,您可能会将脚本移动到不同的子域中)等)。在这种情况下,很多人都会放弃Apache的mod_rewrite。