【问题标题】:Hyperlink starting slash?超链接起始斜线?
【发布时间】:2011-03-16 01:11:59
【问题描述】:

在我的 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 文件。

【问题讨论】:

    标签: php html url hyperlink


    【解决方案1】:

    这实际上取决于您如何构建您的网站。相对 URL 很棒(通过 href="index.php",您实际上是在说 href="./index.php"),但是当您开始将页面分散到多个目录时,它们可能会开始变得混乱。

    就我个人而言,我喜欢将我的所有相对 URL 都基于根目录,这意味着我的所有 URL 都以斜杠 ('/') 开头。这样,我的脚本是在 / 还是 /admin 中并不重要,因为我将始终拥有一个恒定的参考点 - 文档根目录 - 而不是结构中的某个相对目录。

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

    因此,请认真考虑您的用例和系统大小。

    另外请记住,如果您将脚本移动到另一台服务器,您的 URL 和目录结构可能会发生变化,这可能会造成严重破坏(例如,您可能将脚本移动到不同的子域、文档根目录、等等。)。在这种情况下,很多人会选择 Apache 的 mod_rewrite。

    【讨论】:

      【解决方案2】:

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

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

      另一种选择是只使用斜线。那么您的链接将相对于您的域根目录:

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

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

      【讨论】:

        【解决方案3】:

        听起来您的问题是关于绝对 URL 与相对 URL。你是为了便携吗?通常最好使用相对 URL,特别是如果您计划在测试环境中工作,然后将文件传输到生产环境。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-05-26
          • 2014-12-20
          • 1970-01-01
          • 2013-05-22
          • 1970-01-01
          • 2023-01-01
          • 1970-01-01
          相关资源
          最近更新 更多