Подтвердить что ты не робот

Slim Framework всегда возвращает 404 Error

В настоящее время я использую 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 → enabled
  • Slim.htaccess:

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

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

$app->run();

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

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

4b9b3361

Ответ 1

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

Мой 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 методы, приемлемые для запрошенного ресурса.

Ответ 2

Я нашел этот пост при поиске в Google "slimframework 404". Сообщение привело меня к решению моей проблемы.

Проблема

Я установил сайт с платформой Slim с помощью 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 (включая w/Composer Slim install) и URL Rewriting в рамочной документации Slim.

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

RewriteEngine On

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

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

Ответ 3

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

https://github.com/codeguy/Slim

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

Ответ 4

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

.htaccess

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

Ответ 5

Я думаю, что ваша проблема связана с "парсером ресурсов", потому что вы не определяете параметр $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();

Пожалуйста, скажите нам, нормально ли это

Ответ 6

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

LoadModule rewrite_module modules/mod_rewrite.so

Ответ 7

Если вы используете 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 rewrite

$sudo service apache2 restart

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

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

$sudo a2dismod rewrite

$sudo service apache2 restart