我有一个简单的问题,但无法在任何地方找到答案
说我有一个网站" mysite.com"。 我可以通过键入" mysite.com"来访问索引页面。或" mysite.com/index.php"。 这工作正常......但是,当我试图去" mysite.com/index.php /"页面加载,但不正确。 究竟发生了什么?我认为它应该返回404错误,因为index.php将被视为(非现有的)目录(即我认为它会尝试找到" mysite.com/index.php/index.php 34)。 事实并非如此。有人可以告诉我究竟发生了什么吗? 当您在斜杠之后放置任何内容时也是如此,即" mysite.com/index.php/hello"
感谢。
答案 0 :(得分:4)
这是由于你的Apache环境变量叫做PATH_INFO。
<强> PATH_INFO 强>
实际上,PATH_INFO与服务PHP页面的Apache Web服务器有关,而不是每个人说的PHP。
PATH_INFO是Apache在启用AcceptPathInfo指令时设置的环境变量。它将包含跟随实际文件名(或现有目录中不存在的文件)的尾随路径名信息将被接受或拒绝。然后将环境变量传递给负责呈现页面的Apache / CGI模块。
可以使用$ _SERVER ['PATH_INFO']在PHP中访问该变量。
例如,假设位置/ test /指向仅包含单个文件here.html的目录。然后请求/test/here.html/more和/test/nothere.html/more收集/更多作为PATH_INFO。
这个答案是从Andrew Moore复制的 Link to original answer
答案 1 :(得分:1)
当服务器注意到URL中的“目录”是脚本而不是实际目录时,它会运行脚本。 URL中路径的其余组件放在PHP变量$_SERVER['PATH_INFO']
中。