apache — PHP AltoRouter, обслуживающий только базовый URL

Я новичок в 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.

4

Решение

Я надеюсь, что вы должны посетить localhost/login.php попробуйте пожалуйста.

2

Другие решения

Изменить этот код

 $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');
2

Кажется, что ваш файл .htaccess игнорируется, это не вызвано AltoRouter или PHP.

В зависимости от того, какая у вас операционная система, вы должны искать, как активировать файл .htaccess в вашей системе.

1

Я столкнулся с той же проблемой, и вы можете решить ее, добавив base_path к маршрутизатору. Допустим, у меня есть проект altoroute в каталоге http://localhost/myapp/ и мой публичный каталог у меня есть index.php файл http://localhost/myapp/public/index.php базовый путь должен быть

$router->setBasePath('/myapp/public');
^----don't but any / here

И это все.

0