0

我一直在尝试使用Restler php api。

我的网络服务器根目录中有一个 api.php 文件:

<?php
require_once('lib/restler.php');

class Say {
    function hello($to='world') {
        return "Hello $to!";
    }
}

$r = new Restler();
$r->addAPIClass('Say');
$r->handle();
?>

我尝试使用最简单的示例 GET api.php/say/hello,但 nginx 一直以错误 404 响应我。在日志中我看到“不是目录”。

我想这是我的 nginx conf 的问题,但找不到任何关于它的具体信息。任何的想法?

4

3 回答 3

5

解决我的问题:

我将代码放入 /api/index.php

然后修改我的nginx配置添加:

location /api {
        if (!-f $request_filename) {
            rewrite ^(.*)$ /api/index.php last;
        }

        if (!-d $request_filename) {
            rewrite ^(.*)$ /api/index.php last;
        }
    }

所以现在如果我调用 GET /api/say/hello,它会重定向到 /api/index.php/say/hello 并且重写规则允许 restler 发挥它的魔力。

我希望这将有助于 nginx 上 restler 的未来用户。

于 2012-04-14T12:45:04.753 回答
1

查看rewrite 模块以了解如何使 nginx 接受api.php/say/helloURL。

于 2012-04-11T08:43:43.810 回答
0

根据 nginx 文档(IfIsEvil http://wiki.nginx.org/IfIsEvil),经过事先考虑,即使解决方案有效,您也应该能够在没有 if 的情况下执行此操作,如下所示:

location /api {
    try_files $uri /api/index.php;

    #if (!-f $request_filename) {
    #    rewrite ^(.*)$ /api/index.php last;
    #}

    #if (!-d $request_filename) {
    #    rewrite ^(.*)$ /api/index.php last;
    #}
}

希望这对其他人有帮助。

于 2013-04-22T14:28:09.830 回答