目标: 学习型PHP框架、框架的代码少、 简单易懂、 方便拓展
第一步:
在windows上开发框架,第一步就是开启Apache的rewrite模块。
今天(2014-NOV-6)被这个问题困扰了4个小时!我不断地更改.htaccess文件的重修规则,怎么弄都不对!后来才发现原因是:Linux下,开启rewrite的方法和windows下的不一样!
在windows下开启方法如下:
1.打开Apache配置文件:httpd.conf。找到如下信息
<Directory "D:/lamp/apache/htdocs"> # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # Options FileInfo AuthConfig Limit # AllowOverride None
2.注意到上面的”AllowOverride None“了吗? 改成”AllowOverride All“。重启服务器,完毕!
3.补充说明,要注意到,我们是在 <Directory "D:/lamp/apache/htdocs"> 目录下改的。与它相似的还有 <Directory /> 和 <Directory "D:/lamp/apache/cgi-bin">。您要知道,在后两者里面改是无效的,而我今天用四个小时就是在证明,证明改后两者是无效的.......
第二步:编写.htaccess规则
1.在windows下创建.htaccess文件。新建txt文档,打开后点击另存为,选择所有格式。输入文件名.htaccess,保存OK!
2.编写rewrite规则。
<IfModule mod_rewrite.c> RewriteEngine on #不显示index.php RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?$1 [QSA,PT,L] </IfModule>
3.保存,打开浏览器输入http://localhost/model/action 如果请求被重定向到了index.php下则成功,否则请继续往下看。
4.未成功定向到index.php下。
4.1现象:404 Not Found
原因一:您的index.php在Apache服务目录下的”子目录“里,然后您注意到了吗?rewrite规则是重定向到/index.php下的,也就是根目录下的index.php文件。
解决方案1:修改rewrite重写规则。找到
RewriteRule ^(.*)$ index.php?$1 [QSA,PT,L]
修改成:
RewriteRule ^(.*)$ 子目录名/index.php?$1 [QSA,PT,L]
补充:我今天(2014-NOV-6)就是被这个问题困扰一下午的!
第三步:原理解析
框架的原理是这样的。
$app = new $controller(); $app->$action();
所有的自定义Controller类(比如LoginController、IndexController)都继承一个Controller类。
class IndexController extends Controller{ } class LoginController extends Controller{ }