Restler始终在服务器上显示NOT FOUND,但在本地计算机上不显示

时间:2012-10-28 21:43:19

标签: php api mod-rewrite restler

当我去

http://localhost/api/auth/login

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

然而,当我去

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

我得到了

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

目前我们有2个人正在从事这个项目,当我们从本地机器运行时,我们俩都没有问题。我们将应用程序放到托管服务器上,以便我们可以在自己的计算机之外开始测试。

代码是完全相同的,我知道这是因为我们使用了一个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

1 个答案:

答案 0 :(得分:1)

当你遇到这样的问题时,首先尝试不用url重写

而不是

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

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

如果有效,您将知道问题是网址重写

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

cgi.fix_pathinfo=0
在你的php.ini中,它将确保路径信息正确传递给Restler,以便restler可以找到路径

如果它不能与网址中的index.php一起使用,您可以尝试生成并验证routes.php,如下所述

routes.php文件

每次我们在调试模式下运行它时,Restler会查看所有api方法及其doc注释以相应地生成路由。当我们在生产模式下运行它时,它会捕获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问题提交一个错误,说明自动加载器无法为您的服务器配置失败,并为我们提供更多detils,以便我们可以重现并修复它。

如果它仍然不起作用,请使用提及您的服务器配置的github问题提交错误,并向我们提供任何有用的详细信息,以便我们可以重现并修复它。

向您致谢,我们还将根据上述内容撰写故障排除指南,以帮助其他人:)