server.php仍收到server.php/123的URL


URL of server.php/123 still received by server.php

所以我今天一直在摆弄backbone.js,并在思考如何让我的PHP代码处理如下所示的AJAX请求:

$.ajax({
    url : "server.php/123",
    data : "empty string",
    type : "POST" // or "GET" - interested in both
});

只是胡搅蛮缠,我发现如果发送了上面的URL,那么"server.php"仍然会收到请求。我看到这一点非常惊讶,因为我预计需要做一些mod_rewrite的废话才能让它发挥作用。

基于这一发现,我有几个问题:

  1. 这对大多数/所有服务器来说是常见的吗?我正在使用Zend运行WAMP本地主机
  2. server.php中,是否可以访问在"/"之后发送的信息,而无需执行mod_rewrite操作(例如,通过调用"server.php/123",我想从server.php访问"123")。我意识到,在主干网的情况下,它将信息作为JSON的一部分发送,所以这只是我试图了解php的工作原理

是的,它很常见,是的,你可以访问它:

$url_parts = explode('/', $_SERVER['REQUEST_URI']);
print_r($url_parts);
感谢响应者。为了提供一个全面的答案,假设这是你的电话:
$.ajax({
    url : "/server.php/123/456",
    data : "some string",
    type : "GET"
});

以下是各种$_SERVER变量的结果:

$_SERVER['PHP_SELF'] = "/server.php/123/456"
$_SERVER['PATH_INFO'] = "/123/456"
$_SERVER['REQUEST_URI'] = "/server.php/123/456?data=some+string"
$_SERVER['QUERY_STRING'] = "data=some+string"

或者,如果你这样做了:

$.ajax({
    url : "/server.php/123/456",
    data : "some string",
    type : "POST"
});

那么返回的值是相同的,除了"?data=some+string"不在$_SERVER['REQUEST_URI']中,并且$_SERVER['QUERY_STRING']为空,所以没有什么奇怪的。

因此,正如@Yoshi在上面建议的那样,获胜者似乎是$_SERVER['PATH_INFO']。事实上,这也不奇怪,因为我在$_SERVER['QUERY_STRING']:的PHP文档中似乎错过了这一点

"包含任何客户端提供的路径名信息脚本文件名,但在查询字符串之前(如果可用)。对于实例,如果当前脚本是通过URL访问的http://www.example.com/php/path_info.php/some/stuff?foo=bar然后$_SERVER['PATH_INFO']将包含/some/stuff。"