PHP MVC 路由 (mod_rewrite)

PHP MVC routing (mod_rewrite)

在我的 php MVC 脚本上执行路由时遇到一些问题。我将为您提供可用的日志和代码。

http://pastebin.com/gs05xFY0

如您所见,我已经取消注释 LoadModule rewrite_module modules/mod_rewrite.so 以及 AllowOverride All,所以现在应该没问题了。 这是我的 access.log 文件(家长建议)

127.0.0.1 - - [19/May/2015:23:46:36 +0200] "GET /projects/mvc/public/home/index/lol HTTP/1.1" 404 1094
127.0.0.1 - - [19/May/2015:23:50:14 +0200] "GET /projects/mvc/public/home/index/lol HTTP/1.1" 404 1094
127.0.0.1 - - [19/May/2015:23:50:17 +0200] "GET /projects/mvc/public/home/index/lol HTTP/1.1" 404 1094
127.0.0.1 - - [19/May/2015:23:50:19 +0200] "GET /projects/mvc/public/home/index/lol HTTP/1.1" 404 1094
127.0.0.1 - - [19/May/2015:23:50:20 +0200] "GET /projects/mvc/public/home/index/lol HTTP/1.1" 404 1094
127.0.0.1 - - [19/May/2015:23:50:31 +0200] "GET /projects/mvc/public/index/home/lol HTTP/1.1" 404 1094
127.0.0.1 - - [19/May/2015:23:50:38 +0200] "GET /projects/mvc/public/home/index/lol HTTP/1.1" 404 1094
127.0.0.1 - - [19/May/2015:23:50:40 +0200] "GET /projects/mvc/public/ HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2015:23:51:00 +0200] "GET /projects/mvc/public/ HTTP/1.1" 200 -
127.0.0.1 - - [19/May/2015:23:51:16 +0200] "GET /projects/mvc/public/home/index/fuuuck HTTP/1.1" 404 1094
127.0.0.1 - - [20/May/2015:00:03:23 +0200] "GET /projects/mvc/public/home/index/fuuuck HTTP/1.1" 404 1094
127.0.0.1 - - [20/May/2015:00:03:30 +0200] "GET /projects/mvc/public/home/index HTTP/1.1" 404 1094
127.0.0.1 - - [20/May/2015:00:08:54 +0200] "GET /projects/mvc/public/home/index HTTP/1.1" 404 1094
127.0.0.1 - - [20/May/2015:00:08:57 +0200] "GET /projects/mvc/public/home/index HTTP/1.1" 404 1094
127.0.0.1 - - [20/May/2015:00:16:42 +0200] "GET /projects/mvc/public/phpinfo.php HTTP/1.1" 200 100480

所以我一直收到 404 FILE NOT FOUND 错误... 这是实际的 .htaccess -文件

Options -MultiViews
RewriteEngine On

RewriteBase /projects/mvc/public

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.+)$ index.php?url= [QSA,L]

这是我的 PHP 代码。

// public/index.php
<?php 

require_once '../app/init.php';

$app = new App;

?>
// app/init.php
<?php

require_once 'core/App.php';
require_once 'core/Controller.php';

?>
// core/App.php
<?php
class App {
    protected $controller = 'home';

    protected $method = 'index';

    protected $params = [];

    public function __construct() {
        $this->parseUrl();
    }

    public function parseUrl() {
            if( isset( $_GET['url'] ) ) {
                echo $_GET['url'];
            }
    }
}

?>
// core/Controller.php
<?php

class Controller {

}

?>
// controllers/home.php
<?php

class Home extends Controller {

    public function index()
    {
        echo "home/index";
    }
}

?>

这是我从 phpinfo()

中获取的已加载模块
core mod_win32 mpm_winnt http_core mod_so mod_access_compat mod_actions mod_alias mod_allowmethods mod_asis mod_auth_basic mod_authn_core mod_authn_file mod_authz_core mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dir mod_env mod_include mod_isapi mod_log_config mod_mime mod_negotiation mod_rewrite mod_setenvif mod_php5 

编辑:这也是错误日志:)

http://pastebin.com/d7793S1H

我在 Win8 上使用 EasyPHP-DevServer-14.1VC11。如果您需要更多信息,请告诉我,我已经为此纠结了一段时间:P

看来您的情况与我在这个问题中遇到的情况非常相似:

请与该答案进行比较,但我相信您只需在顶部添加此目录索引即可:

DirectoryIndex index.php