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 файл, который я сейчас использую. (общая ссылка)
Ответы
Ответ 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