0

当我去

http://localhost/api/auth/login

我得到了我所期望的......一些让我登录的数据。

然而,当我去

http://myurl.com/api/auth/login

我只是得到

{
    "error": {
        "code": 404,
        "message": "Not Found"
    }
}

目前我们有两个人在做这个项目,当我们从本地机器上运行它时,我们两个都没有问题。我们已经到了将应用程序放到托管服务器上的地步,这样我们就可以在我们自己的机器之外开始对其进行测试。

代码是相同的,我知道这一点是因为我们使用了一个服务器也从中提取的 git 存储库。

我的机器是mac,我的朋友是windows机器,我们的主机是linux机器。这并不重要,因为它们都应该与 mod_rewrite 一起工作,这是 Restler 3 的要求。

我能想到的唯一其他细节是服务器由 HostMonster 托管,运行 PHP 5.4.7

任何帮助将不胜感激。你需要更多信息?

=== 编辑:这是我的 .htaccess 文件。此外,服务器运行 CGI/FastCGI 而不是 mod_php

Options -MultiViews
DirectoryIndex index.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^$ index.php [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<IfModule mod_php5.c>
    php_flag display_errors Off
</IfModule>

我刚刚用谷歌搜索了“fastcgi mod_rewrite”,但这些链接都没有帮助:P

4

1 回答 1

2

当您遇到此类问题时,请先尝试不重写 url

代替

http://myurl.com/api/auth/login

尝试

http://myurl.com/api/index.php/auth/login

如果它有效,您将知道问题在于 url 重写

由于您使用的是 CGI/FastCGI,请确保您已设置

cgi.fix_pathinfo=0

在您的 php.ini 中,它将确保将路径信息正确传递给 Restler,以便 restler 可以找到路线

如果它不适用于 url 中的 index.php,您可以尝试生成和验证routes.php,如下所述

路由.php

每次我们在调试模式下运行时,Restler 都会查看所有 api 方法及其文档注释以生成相应的路由。当我们在生产模式下运行它时,它会捕获 routes.php 中的信息并使用它而不是每次都生成路由,从而提高效率。

您可以通过在生产模式下初始化 restler 并在每次调用时刷新来检查生成的路由

$r = new Restler(true, true); 

然后检查生成的routes.php

如果您routes.php不包含任何路线,它将如下所示

<?php $o = array();

// ** THIS IS AN AUTO GENERATED FILE. DO NOT EDIT MANUALLY ** 
return $o;

如果这是您的情况,这意味着自动加载器无法加载 api 类,您可以通过手动包含 API 类来确认它

如果它开始工作,请使用 github 问题提交一个错误,说明自动加载器因您的服务器配置失败,并给我们更多细节,以便我们可以重现并修复它。

如果仍然无法正常工作,请使用 github 问题提交一个错误,提及您的服务器配置,并提供任何可以帮助的细节,以便我们可以重现并修复它。

感谢您,我们还将根据上述内容编写故障排除指南,以帮助restler社区:)

于 2012-10-29T06:04:04.157 回答