2015-06-30 12 views
1

Моя проблема: я не могу добавить маршрут, отличный от '/'. если я меняю / на /hello Я получаю ошибку 404. Я думаю, что у меня ошибка на моих дорогах или .htaccess.не удается добавить маршрут в Slim

мой .htaccess:

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

вот мой код и моя структура проекта

require '../../vendor/slim/slim/Slim/Slim.php'; 
\Slim\Slim::registerAutoloader(); 
require_once '../../vendor/autoload.php'; 
$app = new \Slim\Slim(); 
$app->get('/hello', function() { //'/' works fine 
    echo "Hello"; 
}); 
$app->run(); 

enter image description here

+0

Вы идете на правильный URL? Итак, «localhost/hello»? Ваш код в порядке. Ofcourse будет '/' отвечать с '404', потому что вы изменили его на'/hello' – GuyT

+0

Я перехожу к: http: // localhost/API/v1/DEVOLO_UI/form/hello –

+0

К какой папке относится ваш документ, ? Думаю, вам нужно использовать 'localhost/DEVOLO_UI/hello' и что показывает ваши инструменты разработчика (вкладка сети)? – GuyT

ответ

1

В файле .htaccess у вас есть следующее правило:

RewriteRule^index.php [QSA,L] – 

Поскольку вы не указали путь для index.php, Apache попытается загрузить файл index.php в текущем каталоге. Но так как этого файла нет, вы получите ответ с ошибкой 404.

Но так как файл .htaccess не находится под каталогом, к которому вы обращаетесь, он даже не загружается сервером. Вы должны выполнить одно из следующих действий:

  1. Переместить index.php файл проекта корневого каталога, так как люди предложили в комментариях на ваш вопрос (что является лучшим решением).
  2. Переместить .htaccess в тот же каталог, что и index.php (он выглядит DEVOLO_UI/form).

Кстати, считаете ли вы использование только автозагрузки Composer? Вам не нужно вызывать оба автозагрузки: Slim и Composer. В вашем index.php вы можете написать примерно следующее:

// Set the current dir to application's root. 
// You may have to change the path depending on 
// where you'll keep your index.php. 
$path = realpath('../../'); 
chdir($path); 

require 'vendor/autoload.php'; 

$app = new \Slim\Slim(); 

// Your routes followed by $app->run(); 
// ...