Slim Framework всегда возвращает 404 Ошибка - PullRequest
24 голосов
/ 17 марта 2012

В эти дни я использую Slim Framework в качестве моего самого простого инструмента для разработки php web api. Используя эти две статьи:

Я следую некоторым шагам оттуда. Скачивая Slim Framework, выкладывая правильный каталог и файлы. Настройка операторов инициализации, таких как;

//1. Require Slim
require('Slim/Slim.php');

//2. Instantiate Slim
$app = new Slim();

//3. Define routes
$app->get('/books', function ($id) {
    //Show book with id = $id
});

А затем я изменяю остальные соответственно.

Например, мой контрольный список, который уже сделан:

  • LoadModule rewrite_module modules / mod_rewrite.so -> включено
  • Тонкий .htaccess:

RewriteEngine On RewriteCond% {REQUEST_FILENAME}! -F RewriteRule ^ (. *) $ bootstrap.php [QSA, L]

Но, после того как я запустил это утверждение;

$app->run();

И я запускаю его в своем браузере .... затем я получил 404 Ошибка во время тестирования на моем Localhost. Как можно это исправить?

К вашему сведению, вот мой самый простой PHP-файл, который я сейчас использую. (общая ссылка)

Ответы [ 8 ]

44 голосов
/ 19 марта 2012

Проблема решена!

Мой apache на самом деле нормальный, и предоставленный ранее файл .htaccess также нормальный.

Подсказка - это URL, который я использовал. Ранее я использовал неверный URL, поэтому он вернул ошибку 404 страницы. Я только что понял это, когда попытался получить доступ к более новому URL GET через браузер с этим;

http://localhost/dev/index.php/getUsers/user1

и теперь это работает!

Я только что понял это, когда нашел эти утверждения;

Если Slim не находит маршруты с URI, которые соответствуют HTTP-запросу URI, Slim автоматически вернет ответ 404 Not Found.

Если Slim находит маршруты с URI, которые соответствуют URI HTTP-запроса, но не совпадают метод HTTP-запроса, Slim автоматически вернет метод 405 Не разрешенный ответ с заголовком Allow:, значение которого содержит HTTP методы, приемлемые для запрашиваемого ресурса.

25 голосов
/ 04 июня 2015

Я нашел этот пост, пока гуглил "slimframework 404".Пост привел меня к решению моей проблемы.

Проблема

Я создал сайт с помощью Slim Framework, используя Composer , и создалindex.php со следующим примером формы slimframework.com:

<?php
$app = new \Slim\Slim();
$app->get('/hello/:name', function ($name) {
    echo "Hello, $name";
});
$app->run();

Затем я пытаюсь получить доступ к странице, используя http://localhost/hello/bob.Я получаю страницу 404 Страница не найдена.

Мне удалось получить доступ к странице, используя http://localhost/index.php/hello/bob.

Решение

Я нашел решение, посмотрев /vendor/slim/.htaccess (включая установку Composer Slim) и раздел Перезапись URL документации Slim Framework.

Я добавил копию /vendor/slim/.htaccessфайл в ту же папку, что и мой файл index.php.Содержимое файла:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L] 

Теперь я могу получить доступ к странице, используя http://localhost/hello/bob.

5 голосов
/ 05 июня 2012

Вы правы, что собираетесь включить index.php в ваш файл, но это происходит из-за того, что вы не работаете должным образом с перезаписью вашего мода.*

В разделе «Начало работы» вы можете увидеть, как настроить сервер (в случае, если вы используете apache / lighttpd / ngynx)

1 голос
/ 14 ноября 2017

Для меня проблема заключалась в том, что я забыл предоставить файл .htaccess в корне моего документа.

.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
0 голосов
/ 28 марта 2018

Для людей, которые все еще ищут ответы, потому что предыдущий не работает, это работает для меня:

RewriteBase /<base_of_your_project>/
0 голосов
/ 28 декабря 2017

Если вы используете Slim в Ubuntu 16.04 и получаете ошибку 404. Попробуйте этот тест от Tod Birdsall выше:

Если это работает

http://localhost/index.php/hello/bob

и это не работает

http://localhost/hello/bob

и ваш файл .htaccess находятся в том же каталоге, что и ваш index.php, и настроены следующим образом:

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteRule ^ index.php [QSA,L]
    </IfModule>

И вы все еще получаете ошибку 404 на Apache.

Попробуйте включить Apache mod_rewrite следующим образом и перезапустите Apache:

$ sudo a2enmod переписать

$ sudo service apache2 restart

Slim API теперь должен работать правильно, так как предоставленный файл .htaccess будет работать, только если включен mod_rewrite и не используется по умолчанию при чистой установке.

Вот как отключить mod_rewirte, если вам нужно.

$ sudo a2dismod rewrite

$ sudo service apache2 restart

0 голосов
/ 15 февраля 2017

Дополнительно mod_rewrite.so модуль должен быть загружен в httpd.conf, иначе вы получите ошибку 500.

LoadModule rewrite_module modules/mod_rewrite.so
0 голосов
/ 30 мая 2013

Я думаю, что ваша проблема в "Анализаторе ресурсов", потому что вы не определяете параметр $ id в запросе, поэтому, пожалуйста, попробуйте это:

//1. Require Slim
require('Slim/Slim.php');

//2. Instantiate Slim
$app = new Slim();

//3. Define routes
$app->get('/books/:id/', function ($id) {
    echo json_encode( getBook($id) );
});

// some stuff
$app->run();

Пожалуйста, сообщите нам, если все в порядке

...