Привет. изучаю mvc, по туториалу сделал каркас но возникла проблема. При вызове контроллера Например:
localhost/mvcless/news пишет что Not Found
The requested URL /mvcless/news was not found on this server.
А если вызвать вот так
localhost/mvcless/?news то все нормально работает
Кто нибудь знает как заставить работать без знака вопроса.
файл index.php в корневом каталоге
<?php
// FRONT COTROLLER
// Общие настройки
ini_set('display_errors', 1);
error_reporting(E_ALL);
// Подключение файлов системы
define('ROOT', dirname(__FILE__));
require_once(ROOT.'/components/Router.php');
// Установка соединения с БД
// Вызов Router
$router = new Router();
$router->run();
<?php
class NewsController {
public function actionIndex()
{
echo 'hi';
return true;
}
}
?>
маршруты из конфига
<?php
return array(
'news' => 'news/index', // actionIndex in NewsController
);
<?php
class Router
{
private $routes;
public function __construct()
{
$routesPath = ROOT.'/config/routes.php';
$this->routes = include($routesPath);
}
// Return type
private function getURI()
{
if (!empty($_SERVER['REQUEST_URI'])) {
return trim($_SERVER['REQUEST_URI'], '/');
}
}
public function run()
{
$uri = $this->getURI();
foreach ($this->routes as $uriPattern => $path) {
if(preg_match("~$uriPattern~", $uri)) {
$segments = explode('/', $path);
$controllerName = array_shift($segments).'Controller';
$controllerName = ucfirst($controllerName);
$actionName = 'action'.ucfirst((array_shift($segments)));
$controllerFile = ROOT . '/controllers/' .$controllerName. '.php';
if (file_exists($controllerFile)) {
include_once($controllerFile);
}
$controllerObject = new $controllerName;
$result = $controllerObject->$actionName();
if ($result != null) {
break;
}
}
}
}
}
пробывал прописывать в виртуальных хостах рутом саму папку mvcless все равно приходилось писать знак вопроса. в windows, в xampp все работает нормально. как это исправить в lamp?