在PHP Slim框架中,特定的路由不能以#Sl; s结尾。或者它会引发500服务器错误

时间:2016-07-08 04:53:34

标签: php slim

我正在尝试使用PHP Slim框架创建一个get路由。

<?php 
$app->get('/bands', function() {
    $response["test"] = 'tester';
    echoResponse(200, $response);
});

每当我调用此路由时,我都会收到500 Server Error,而我的PHP日志表明$app为空。但是,如果我将路线更改为:

<?php 
$app->get('/band', function() {
    $response["test"] = 'tester';
    echoResponse(200, $response);
});

一切都按预期运作。有一些关于&#39; s&#39;在乐队路线。我不能放一个&#39;在乐队上使它成为乐队。

更新:没有带有&#39;&#39;在最后的工作!

我只是不明白为什么会这样。任何帮助将不胜感激。

如果你想知道echoResponse(200,$response);做了什么,它只需要获取数组并将其作为JSON对象返回给浏览器,HTTP响应为200 Success。这就是它的样子:

function echoResponse($status_code, $response) {
    $app = \Slim\Slim::getInstance();
    // Http response code
    $app->status($status_code);

    // setting response content type to json
    $app->contentType('application/json');

    echo json_encode($response);
}

这是我的index.php:

<?php
require 'libs/Slim/Slim.php';

\Slim\Slim::registerAutoloader();

$app = new \Slim\Slim();

// The separate files that serve the routes
require_once 'bands.php';
require_once 'users.php';
require_once 'instructors.php';
require_once 'musicians.php';

function echoResponse($status_code, $response) {
    $app = \Slim\Slim::getInstance();
    // Http response code
    $app->status($status_code);

    // setting response content type to json
    $app->contentType('application/json');

    echo json_encode($response);
}

$app->run();

然后我的路线包含在上述所需文件中:

波段:

<?php 
$app->get('/bands', function() {
    $response["test"] = 'tester';
    echoResponse(200, $response);
});

用户:

<?php 
$app->get('/users', function() {
    $response["test"] = 'tester';
    echoResponse(200, $response);
});

音乐家:

<?php 
$app->get('/musicians', function() {
    $response["test"] = 'tester';
    echoResponse(200, $response);
});

导师:

<?php 
$app->get('/instructors', function() {
    $response["test"] = 'tester';
    echoResponse(200, $response);
});

如果删除后面的&#39;

,以上所有路线都有效

如果有帮助的话。这是我的.htaccess:

RewriteEngine On
RewriteBase /api/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

1 个答案:

答案 0 :(得分:1)

Apache是​​罪魁祸首,这与Slim无关。您启用了多视图,并且Web服务器与php文件(bands.php)匹配。请求永远不会达到Slim。

要使您的路线正常工作,请将此行添加到.htaccess文件的开头:

Options -Multiviews

有关具体情况的进一步说明,来自Apache docs的代码段:

  

MultiViews的效果如下:如果服务器收到了   请求/ some / dir / foo,如果/ some / dir启用了MultiViews,并且   / some / dir / foo不存在,然后服务器读取目录   寻找名为foo。*的文件,并有效地伪造一个类型地图   它命名所有这些文件,为它们分配相同的媒体类型和   如果客户要求其中一个,它将具有内容编码   他们的名字。然后它选择与客户的最佳匹配   要求。