2014-01-23 40 views
7

我有一个简单的问题,但无法找到答案任何地方当我在.php url后加上斜线(/)时会发生什么?

说我有一个网站“mysite.com”。 我可以通过输入“mysite.com”或“mysite.com/index.php”访问索引页面。 这工作正常......但是,当我尝试去“mysite.com/index.php/”页面加载,但不正确。 究竟发生了什么?我认为它应该返回一个404错误,因为index.php将被视为一个(不存在的)目录(即我认为它会尝试找到“mysite.com/index.php/index.php”)。 这显然不是这种情况。有人可以告诉我究竟发生了什么吗? 当你在斜线后面加上任何东西时,也是如此,即“mysite.com/index.php/hello”

谢谢。

+0

它只是作为PATH_INFO处理。然而,虚拟路径片段打破了相关资源链接(CSS,图像)。 – mario

+0

感谢您的回复。我还是不太明白。最重要的是允许这样的网址有效吗?为什么不只是返回404错误? – Guy

回答

4

这是由于您的Apache环境变量PATH_INFO。

PATH_INFO

其实,PATH_INFO是关系到Apache Web服务器提供服务的PHP页面和每说不是PHP。

PATH_INFO是一个由Apache在打开AcceptPathInfo指令时设置的环境变量。它将包含跟随实际文件名(或现有目录中不存在的文件)的尾随路径名信息将被接受或拒绝。然后将环境变量传递给负责渲染页面的Apache/CGI模块。

该变量可以在PHP中使用$ _SERVER ['PATH_INFO']进行访问。

例如,假设location/test /指向仅包含单个文件here.html的目录。然后请求/test/here.html/more和/test/nothere.html/more都收集/更多作为PATH_INFO。当服务器注意到URL中的“目录”是一个脚本,而不是实际的目录,它运行的脚本

这个答案是从安德鲁·穆尔 Link to original answer

+0

这对Apache来说真的很独特吗? NGINX不会做同样的事情? – Barmar

+3

如果您从其他答案复制,则需要署名。 – mario

+0

@mario我已经给另一个问题的链接。 –

1

复制。 URL中路径的其余组件放在PHP变量$_SERVER['PATH_INFO']中。

相关问题