当我在.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”
谢谢。
这是由于您的Apache环境变量PATH_INFO。
PATH_INFO
实际上,PATH_INFO与提供PHP页面的Apache Web Server相关,而不是PHP。
PATH_INFO是在打开AcceptPathInfo指令时由Apache设置的环境变量。 它将包含跟随实际文件名(或现有目录中不存在的文件)的尾随路径名信息将被接受或拒绝。 然后将环境变量传递给负责渲染页面的Apache / CGI模块。
该变量可以使用$ _SERVER ['PATH_INFO']在PHP中访问。
例如,假设location / test /指向一个只包含单个文件here.html的目录。 然后请求/test/here.html/more和/test/nothere.html/more都收集/更多作为PATH_INFO。
这个答案是从安德鲁摩尔链接复制到原来的答案
当服务器注意到URL中的“目录”是脚本而不是实际的目录时,它将运行该脚本。 URL中路径的其余组件放在PHP变量$_SERVER['PATH_INFO']
。