baseUrl 到底是啥
Posted
技术标签:
【中文标题】baseUrl 到底是啥【英文标题】:What exactly is a baseUrlbaseUrl 到底是什么 【发布时间】:2013-02-06 09:57:46 【问题描述】:我花了一些时间试图理解什么是 baseUrl(通过学习 Zend 框架),但令人惊讶的是,对于这样一个无处不在的实用程序,没有一个“专家”或博主甚至尝试定义 baseUrl 以便学习者一个想法是什么。他们都假设您知道它是什么,然后继续推导它,每个人都使用自己的方法得出自己的结果。从我目前阅读的内容来看:
有些人认为它是一个主页 URL,我自然会认为它是这样的(正如名称所暗示的那样),可以通过 $_SERVER["HTTP_HOST"]
或 $_SERVER["SERVER_NAME"]
访问,但令人惊讶的是,这些似乎是少数.
有些人认为这是一个当前页面,由$_SERVER["REQUEST_URI"]
或$_SERVER["php_SELF"]
访问,附加到服务器名称
而其他人认为它可以是上述任何一个或任何 url (嗯,至少这是我得到的印象),这取决于用户想要如何使用它。
所以有人可以解释一下 baseUrl 是什么,而不是假设我也是“专家”以及为什么我可能需要它。谢谢。
编辑: baseUrl 应该在大多数 Zend 项目中自动设置,但显然不是我的情况。即使我执行echo $this->baseUrl()
或var_dump($this->baseUrl())
,我也一无所获。所以我真的不知道这个实用程序是关于什么的。
【问题讨论】:
baseurl 根据您的服务器定义绝对路径。如果服务器发生变化,您无需手动更改。 【参考方案1】:您的网站由一系列网页组成。每个网页都有一个完整的统一资源定位器 (URL),例如 http://www.your.com/intro.htm。 您的网页 URL 通常以相同的一组字母开头,例如在这种情况下为 http://www.your.com/。这个通用前缀就是我们所说的基本 URL。
使用基本 URL 可以简化您的工作,因为您无需查看或输入要引用的每个页面的完整 URL。
或者
分配给页面的 URL,通过添加文档名称或尾部斜杠 / 将“相对 URL”转换为“绝对 URL”
要了解zend url,请参考link
【讨论】:
【参考方案2】:为什么需要baseUrl()
设施的简短回答如下:
应用的部署位置应该是配置问题,而不是核心应用功能问题
在许多(甚至可能是大多数)情况下,应用程序的基本 URL 将只是 $_SERVER['HTTP_HOST']
或 $_SERVER['SERVER_NAME']
。
但情况并非总是如此。
最容易考虑的例子是一个标准网站,它有通常的页面:
http://example.com/
http://example.com/contact
http://example.com/about
// etc
现在您编写(或作为 OSS 包购买或下载)您希望在 url 下部署的博客应用程序:
http://example.com/blog
博客可能有如下链接:
http://example.com/blog/post/my-post-slug
http://example.com/blog/categories/some-category
//etc
所有这些链接都位于/blog
下。
博客应用程序本身应该只关注博客内的链接/页面/路由。尽管您的博客模板很可能包含返回站点其余部分的页眉/页脚链接,但核心博客应用程序功能的其余部分不必了解您站点的其余部分。不知何故,博客应用程序需要知道,当他生成指向博客文章和博客类别以及所有其他博客相关页面的链接时,它们都必须以 http://example.com/blog
为前缀。
值$_SERVER['HTTP_HOST']
或$_SERVER['SERVER_NAME']
不反映此环境/部署信息。使用 base-url 值配置(!)应用程序并在生成链接时始终使用某种 baseUrl()
函数(使用此配置)是保持核心应用程序功能专注于其自身业务而不是外部业务的好方法部署因素。
【讨论】:
谢谢@All。但是baseUrl不是应该自动设置的吗?正如this thread 上选择的答案所支持的那样,但是当我执行echo $this->baseUrl();
或var_dump($this->baseUrl());
时,它什么都没有。
有趣的是,截至目前,该问题的公认答案并不是最高投票。实际上,框架会尝试猜测 baseUrl。但这并不总是正确的,尤其是当您部署在严格低于服务器公共文档根目录的某个路径上或服务器设置中有异常时。复杂算法见Zend_Controller_Request_Http::setBaseUrl()以上是关于baseUrl 到底是啥的主要内容,如果未能解决你的问题,请参考以下文章
viewcontroller 使用 NULL baseURL 参数和 loadHTMLString baseURL 方法:数据定理