1

所以我今天一直在摆弄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 的工作原理。
4

2 回答 2

1

感谢响应者。为了提供全面的答案,假设这是您的电话:

$.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']. 事实上,这也不足为奇,因为我似乎在PHP 文档中错过了这一点$_SERVER['QUERY_STRING']

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

于 2013-09-04T18:32:20.223 回答
1

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

$url_parts = explode('/', $_SERVER['REQUEST_URI']);
print_r($url_parts);
于 2013-09-04T16:31:18.033 回答