server.php / 123的URL仍由server.php接收

时间:2013-09-04 16:07:30

标签: php jquery ajax backbone.js

所以今天我一直在用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”我想访问“ 123“来自server.php)。我意识到,在骨干的情况下,它将信息作为JSON的一部分发送,所以这只是我试图了解PHP如何工作。

2 个答案:

答案 0 :(得分:1)

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

$url_parts = explode('/', $_SERVER['REQUEST_URI']);
print_r($url_parts);

答案 1 :(得分:1)

感谢响应者。为了提供全面的答案,我们可以说这是您的电话:

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

以下是各种$_SERVER vars的结果:

$_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'] {{1}}上错过了这一点:

  

“包含任何客户提供的跟踪实际的路径名信息   脚本文件名,但在查询字符串之前,如果可用。对于   例如,如果通过URL访问当前脚本   那么PHP documentation   $ _SERVER ['PATH_INFO']将包含/ some / stuff。“