我正在开发一个基于PHP和MySQL的个人项目,我正在做一些研究并玩弄重写。说我有一个网站......
http://www.myDomain.com/
我希望在域的根目录中有一个index.php或bootstrap。所以,如果你访问......
http://www.myDomain.com/admin/
它仍然会从域顶层的index.php加载,它处理配置文件的解析和加载,并将用户重定向到正确的位置,并在此过程中创建漂亮的链接。
我应该从哪里开始我的研究和教育?我有些不知所措。谢谢您的时间:))
更新
听起来我做想要转向带前端控制器的MVC系统。关于编写我自己的MVC框架的任何好的参考(将是非常基本的)。老实说,我现在不想拉入Zend框架(会大量增加它!)
答案 0 :(得分:2)
基本上,您将任何传入的请求重写为index.php
。以下是Kohana框架中的.htaccess
示例:
# Turn on URL rewriting
RewriteEngine On
# Protect application and system files from being viewed
# RewriteRule ^(application|modules|system) - [F,L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT,L]
所以你的例子将被路由到index.php/admin
。然后,您可以查看$_SERVER['REQUEST_URI']
以确定下一步该做什么。
一个相对常见的模式是使用URI
的第一段作为控制器,第二段作为方法。例如:
$segments = explode($_SERVER['request_uri'], '/');//array('admin')
if(isset($segments[0]))
{
$class = $segments[0].'_controller';//'admin_controller
if(isset($segments[1]))
$method = $segments[1];
else
$method = 'index';
}
else
{
$class = 'index_controller';
$method = 'index';
}
$controller = new $class;
$controller->$method();
该代码绝不是生产准备好的,因为如果例如用户访问了不存在的控制器的URL,它将死于火热的死亡。它也不会像句柄参数那样做得很好。但这是PHP MVC框架如何运作背后的想法。
顺便说一句,你正在调用bootstrap的另一个名字是front controller。您可以谷歌该术语以查找有关该模式的更多信息。
答案 1 :(得分:1)
您需要查看配置.htaccess
以在内部重写对引导程序文件的所有请求,可能是index.php
Kohana使用它来做到这一点
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
然后,您可以访问$_SERVER['REQUEST_URI']
以开始将请求路由到控制器。