PHP AltoRouter仅提供基本URL

时间:2016-08-30 20:58:42

标签: php apache .htaccess routing altorouter

我是PHP的noobie,我正在使用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 个答案:

答案 0 :(得分:2)

我希望你能访问localhost/login.php。请它。

答案 1 :(得分: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 :(得分:1)

您的.htaccess文件似乎被忽略,这不是由AltoRouter或PHP引起的。

根据您拥有的操作系​​统,您应该搜索如何激活系统上的.htaccess文件。

答案 3 :(得分:0)

我遇到了同样的问题,您可以通过向路由器添加base_path来解决它。假设我在目录http://localhost/myapp/中有我的altoroute项目,而我的公共目录中有index.php文件http://localhost/myapp/public/index.php,基本路径应为

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

就是这样。