什么是baseUrl?

17
我花了一些时间学习Zend Framework,试图理解什么是baseUrl,但令人惊讶的是,对于如此普遍的实用程序,甚至没有一个“专家”或博主尝试定义baseUrl,以便学习者了解它的内容。他们都认为您知道它是什么,然后继续推导它,每个人都使用自己的方法来得到自己的结果。从迄今为止我所读的内容来看:
一些人认为它是主页URL,这正是我自然而然认为它是(从名称中暗示),可以通过$_SERVER["HTTP_HOST"]$_SERVER["SERVER_NAME"]访问,但令人惊讶的是这些人似乎很少。
有些人认为它是要通过$_SERVER["REQUEST_URI"]$_SERVER["PHP_SELF"]附加到服务器名称上的当前页面
而另一些人则认为它可以是上述任何一种或任何URL(至少这是我的印象),取决于用户想要如何使用它。
那么,有人能否请解释一下什么是baseUrl,而不假设我也是“专家”,以及我可能需要它的原因。谢谢。
编辑:大多数Zend项目应该会自动设置baseUrl,但在我的情况下显然没有。即使我执行echo $this->baseUrl()var_dump($this->baseUrl()),也没有结果。所以我真的不知道这个实用程序是关于什么的。

baseurl 根据您的服务器定义绝对路径。如果服务器更改,您无需手动更改它。 - Ripa Saha
2个回答

25
为什么你需要 baseUrl() 设施的简短答案是:
应用程序部署在哪里应该是配置问题,而不是核心应用程序功能问题。
在许多情况下 - 甚至是大多数情况下,应用程序的基本URL将只是 $_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME']
但并非总是如此。
最简单的示例是一个标准网站,其中包含以下页面:
http://example.com/ http://example.com/contact http://example.com/about //等等
现在你编写(或购买或作为 OSS 包下载)一款博客应用程序,你想要将其部署到以下 URL: http://example.com/blog 博客可以有以下链接:
http://example.com/blog/post/my-post-slug http://example.com/blog/categories/some-category //等等
所有这些链接都位于 /blog 下。
博客应用程序本身应只关注博客内的链接/页面/路由。虽然你的博客模板很可能包含指向站点其余部分的页眉/页脚链接,但其余核心博客应用程序功能不必知道站点的其他部分。博客应用程序需要知道的是,当它生成指向博客文章和博客类别以及所有其他博客相关页面的链接时,它们都必须以 http://example.com/blog 作为前缀。

$_SERVER['HTTP_HOST']$_SERVER['SERVER_NAME'] 不反映此环境/部署信息。使用基础URL值配置应用程序,并在生成链接时始终使用某种消耗此配置的baseUrl()函数是保持核心应用程序功能专注于其自身业务而不是外部部署因素的好方法。


感谢@All. 但是baseUrl不应该自动设置吗?这是由this thread 的选择答案支持的,但是当我执行一个 echo $this->baseUrl(); 或者一个 var_dump($this->baseUrl()); ,它什么都没有。 - okey_on
有趣的是,截至目前,该问题的被接受答案并不是投票最高的。的确,框架会尝试猜测baseUrl。但它并不总是正确的,特别是当您部署在服务器公共文档根目录下的某个严格路径或者在服务器设置中有些不寻常的情况时。请参考 Zend_Controller_Request_Http::setBaseUrl() 中的复杂算法。 - David Weinraub

4
您的网站由一系列网页组成。每个网页都有一个完整的统一资源定位符(URL),例如:http://www.your.com/intro.htm
您的网页URL通常以相同的一组字母开头,例如,在这种情况下为http://www.your.com/。这个共同的前缀就是我们所说的基本URL。
使用基本URL简化了您的工作,因为您不需要查看或输入要引用的每个页面的完整URL。
或者
分配给页面的URL通过添加文档名称或尾部斜杠/将“相对URL”转换为“绝对URL”。
要了解Zend URL,请参考此链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接