0

我经常使用 $_SERVER[DOCUMENT_ROOT] 来确保我的所有链接都能正常工作。例如:

<link href="' . $_SERVER[DOCUMENT_ROOT] . '/favicon.ico" rel="icon" />

文件的实际路径无关紧要,它总能找到网站图标相对于文档根目录的正确位置。

这一切都在我的网络服务器上按预期工作。但是,在我的本地开发服务器(Windows 7、Apache 2.2、配置的虚拟主机)上,虽然它指向正确的路径(C:/Local/MySite),但实际上什么也没发生(favicon 不起作用,样式表和图像不' t得到加载等)

有没有办法让 $_SERVER[DOCUMENT_ROOT] 在本地工作?

我发现使用“http://”和 $_SERVER[HTTP_HOST] ( ) 可以获得相同的预期结果,<link href="http://' . $_SERVER[HTTP_HOST] . '/favicon.ico" rel="icon" />这样做有什么缺点吗?或者,我可以继续使用 $_SERVER[DOCUMENT_ROOT] 并使用服务器重写规则将其解析为将在本地运行的内容,并保持浏览器不变。

4

2 回答 2

3

$_SERVER[DOCUMENT_ROOT]是网站根目录的完整路径,对于链接和图像应该会非常失败。

现在,话虽如此,到目前为止您所拥有的一切都还可以......除了$_SERVER[HTTP_HOST]只有在使用 HTTP/1.1 建立连接并且客户端发出 Host 标头时才有效。 $_SERVER[SERVER_NAME]不过,应该始终有效。请注意,这$_SERVER[SERVER_NAME]将使用虚拟主机主地址,所以如果服务器有别名......

于 2012-04-05T14:37:57.083 回答
1

文档根目录是您服务器上的本地路径,就浏览器看到您的站点而言,在 URL 空间中没有任何意义。

如果你的 html 有

<img src="c:/site/html/favicon.ico" />

您会告诉用户的浏览器尝试从用户自己的本地驱动器加载该图标。这不仅不起作用,而且还假定用户在 Windows 机器上。Mac/Unix/Linux 用户不会有 C: 驱动器,更不用说/site/html在他们自己的本地文件系统的根目录中的目录树了。

$_SERVER['DOCUMENT_ROOT']用于服务器内本地文件操作,例如 fopen()、file_get_contents() 等……但对于客户端操作基本上完全没用。

于 2012-04-05T14:47:46.630 回答