PHP MVC 路由 (mod_rewrite)
PHP MVC routing (mod_rewrite)
在我的 php MVC 脚本上执行路由时遇到一些问题。我将为您提供可用的日志和代码。
如您所见,我已经取消注释 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
编辑:这也是错误日志:)
我在 Win8 上使用 EasyPHP-DevServer-14.1VC11。如果您需要更多信息,请告诉我,我已经为此纠结了一段时间:P
看来您的情况与我在这个问题中遇到的情况非常相似:
请与该答案进行比较,但我相信您只需在顶部添加此目录索引即可:
DirectoryIndex index.php
在我的 php MVC 脚本上执行路由时遇到一些问题。我将为您提供可用的日志和代码。
如您所见,我已经取消注释 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
编辑:这也是错误日志:)
我在 Win8 上使用 EasyPHP-DevServer-14.1VC11。如果您需要更多信息,请告诉我,我已经为此纠结了一段时间:P
看来您的情况与我在这个问题中遇到的情况非常相似:
请与该答案进行比较,但我相信您只需在顶部添加此目录索引即可:
DirectoryIndex index.php