Php 到底什么是基本URL

Php 到底什么是基本URL,php,zend-framework,base-url,Php,Zend Framework,Base Url,我花了一些时间试图理解baseUrl是什么(通过学习Zend Framework),但令人惊讶的是,对于这样一个无处不在的实用程序,甚至没有一位“专家”或博客作者试图定义baseUrl,以便学习者了解它的含义。他们都假设你知道它是什么,然后继续推导,每个人都用自己的方法得出自己的结果。根据我目前所读到的: 有些人认为这是一个主页Url,我自然会认为它是(从名称中可以看出),可以由$\u服务器[“HTTP\u主机”]或$\u服务器[“服务器名称”]访问,但令人惊讶的是,这些似乎是少数 一些人认为它

我花了一些时间试图理解baseUrl是什么(通过学习Zend Framework),但令人惊讶的是,对于这样一个无处不在的实用程序,甚至没有一位“专家”或博客作者试图定义baseUrl,以便学习者了解它的含义。他们都假设你知道它是什么,然后继续推导,每个人都用自己的方法得出自己的结果。根据我目前所读到的:

有些人认为这是一个主页Url,我自然会认为它是(从名称中可以看出),可以由
$\u服务器[“HTTP\u主机”]
$\u服务器[“服务器名称”]
访问,但令人惊讶的是,这些似乎是少数

一些人认为它是一个当前页面,可以由附加在服务器名称后面的
$\u服务器[“REQUEST\u URI”]
$\u服务器[“PHP\u SELF”]
访问

而其他人认为它可以是上面的任何一个或任何url(好吧,至少这是我得到的印象),这取决于用户想要如何使用它

所以,请有人解释一下baseUrl到底是什么,而不要假设我也是“专家”以及为什么我可能需要它。多谢各位


编辑:大多数Zend项目都应该自动设置baseUrl,但我的情况显然不是这样。即使我做了
echo$this->baseUrl()
var\u dump($this->baseUrl())
,我也一无所获。所以我真的不知道这个实用程序是关于什么的。

你的网站是由一系列网页组成的。每个网页都有一个完整的统一资源定位器(URL),类似于。 您的网页URL通常以同一组字母开头,例如在本例中。这个通用前缀就是我们所说的基本URL

使用基本URL可以简化您的工作,因为您不需要查看或键入要引用的每个页面的完整URL

分配给页面的URL,通过添加文档名或尾随斜杠将“相对URL”转换为“绝对URL”/


要理解zend url,请参考此

关于为什么需要使用
baseUrl()
功能的简短答案如下:

应用程序的部署位置应该是配置问题,而不是核心应用程序功能问题

在大多数情况下,应用程序的基本url只是
$\u SERVER['HTTP\u HOST']
$\u SERVER['SERVER\u 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


$\u SERVER['HTTP\u HOST']
$\u SERVER['SERVER\u NAME']
不反映此环境/部署信息。使用基本url值配置(!)应用程序,并在生成链接时始终使用某种
baseUrl()
函数(使用此配置),这是一种很好的方法,可以让您的核心应用程序功能专注于自己的业务,而不是外部部署因素。

baseUrl根据您的服务器定义绝对路径。如果服务器发生更改,您无需手动更改。谢谢@All。但是baseUrl不是应该自动设置的吗?由上选择的答案支持,但当我执行
echo$this->baseUrl()时
变量转储($this->baseUrl())没有结果。有趣的是,到目前为止,在这个问题上被接受的答案并不是得票最高的。实际上,框架将尝试猜测baseUrl。但这并不总是正确的,尤其是当您部署在严格低于服务器公共文档根目录的某个路径上,或者服务器设置中存在异常情况时。请参阅中的复杂算法