Я новичок в PHP, я настраиваю простую маршрутизацию с помощью AltoRouter. Ниже мои файлы index.php и .htaccess, которые находятся в папке маршрута, т.е. / var / www / html /
Я использую Apache2 для обслуживания веб-страниц.
index.php
<?php
require 'vendor/AltoRouter.php';
$router = new AltoRouter();
// map homepage
$router->map('GET', '/', function () {
require __DIR__ . '/views/home.php';
});
$router->map('GET|POST', '/login', function () {
require __DIR__ . '/views/login.php';
});
$router->map('GET', '/signup', function () {
require __DIR__ . '/views/signup.php';
});
$match = $router->match();
// call closure or throw 404 status
if ($match && is_callable($match['target'])) {
call_user_func_array($match['target'], $match['params']);
} else {
// no route was matched
header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
}
?>
.Htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
Проблема:
Когда я захожу на localhost, «home.php» обслуживается, но когда я захожу на «localhost / login» или «localhost / signup», я получаю ошибку 404.
Я надеюсь, что вы должны посетить localhost/login.php
попробуйте пожалуйста.
Изменить этот код
$router->map('GET', '/', function () {
require __DIR__ . '/views/home.php'; });
$router->map('GET|POST', '/login', function () {
require __DIR__ . '/views/login.php'; });
$router->map('GET', '/signup', function () {
require __DIR__ . '/views/signup.php'; });
со следующим …..
$router->map('GET', '/views', '/views/home.php','home');
$router->map('GET', '/views/login', '/views/login.php','login');
$router->map('GET', '/views/signup', '/views/signup.php','signup');
Кажется, что ваш файл .htaccess игнорируется, это не вызвано AltoRouter или PHP.
В зависимости от того, какая у вас операционная система, вы должны искать, как активировать файл .htaccess в вашей системе.
Я столкнулся с той же проблемой, и вы можете решить ее, добавив base_path к маршрутизатору. Допустим, у меня есть проект altoroute в каталоге http://localhost/myapp/
и мой публичный каталог у меня есть index.php
файл http://localhost/myapp/public/index.php
базовый путь должен быть
$router->setBasePath('/myapp/public');
^----don't but any / here
И это все.