@xxliixin1993
2015-11-07T14:54:02.000000Z
字数 3083
阅读 1335
index.php
功能: 定义网站根目录。初始化程序,实现类的自动加载,路由分发。
url : 网站域名/前台(home)|后台(admin)/控制器/动作名?参数名1=参数值1&参数名2=参数值2
Example:
www.frame.com/admin/index/index/?key1=val1&key2=val2
这时会去请求app\controller\admin\IndexController.class.php的indexAction方法,传参为key1,key2 值为val1,val2
<VirtualHost 127.0.0.6:80>
DocumentRoot "d:/test/Frame"
RewriteEngine on
#如果文件存在,就直接访问文件,不进行下面的RewriteRule.(不是文件或文件不存在就执行重写)
RewriteCond %{SCRIPT_FILENAME} !-f
#如果目录存在就直接访问目录不进行RewriteRule
RewriteCond %{SCRIPT_FILENAME} !-d
#如果是这些后缀的文件,就直接访问文件,不进行Rewrite
RewriteCond %{REQUEST_URI} !^.*(\.css|\.js|\.gif|\.png|\.jpg|\.jpeg)$
#匹配到任意字符都跳转到/index.php,并停止分析以后规则的重写
RewriteRule . /index.php [L]
</VirtualHost>
RewriteRule规则:
RewriteRule ^/world/list/(?:_l([0-9]+))?(?:_a([0-9\-]+))?(?:_u([0-9]+))?(?:_n([0-9]+))?(?:_x([0-9]+))? /world/index.php?c=world&a=worldListIndex&listType=$1&path=$2&purpose=$3&pricemin=$4&pricemax=$5 [QSA,L]
Example:
RewriteRule /pages/(.+) /page.php?page=$1 [QSA]
大意就是: 使用了[QSA]标记 /pages/123?one=two 会变成这样 /page.php?page=123&one=two
没有使用就只能这样,(就是说.?之后的不包括在(.*)里)/page.php?page=123
Rewrite标志
R[=code](force redirect) 强制外部重定向
G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。
P(force proxy) 强制使用代理转发。
L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。
N(next round) 重新从第一条规则开始运行重写过程。
C(chained with next rule) 与下一条规则关联
如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过
T=MIME-type(force MIME type) 强制MIME类型
NS (used only if no internal sub-request) 只用于不是内部子请求
NC(no case) 不区分大小写
QSA(query string append) 追加请求字符串
NE(no URI escaping of output) 不在输出转义特殊字符
配置文件应写在/data/config/下以 配置文件名.config.php的格式命名(例:DataBase.config.php)
Example:
url:http://www.frame.com/admin/index/index
/app/controller/admin/IndexController.class.php代码
<?php
namespace app\controller\admin;
use core\Controller;
/**
* 后台首页
*/
class IndexController extends Controller {
//配置文件
public $config;
/**
* 构造函数
*/
public function __construct(){
parent::__construct();
//echo 'app\controller\admin --IndexController __construct';
}
public function indexAction(){
var_dump($this->config['DataBase']);
var_dump($this->config['Model']);
}
}
输出:
array (size=2)
'master' =>
array (size=5)
'type' => string 'MySQL' (length=5)
'host' => string '127.0.0.1' (length=9)
'user' => string 'root' (length=4)
'password' => string '123456' (length=6)
'dbname' => string 'test' (length=4)
'slave' =>
array (size=2)
'slave1' =>
array (size=5)
'type' => string 'MySQL' (length=5)
'host' => string '127.0.0.1' (length=9)
'user' => string 'root' (length=4)
'password' => string '123456' (length=6)
'dbname' => string 'test' (length=4)
'slave2' =>
array (size=5)
'type' => string 'MySQL' (length=5)
'host' => string '127.0.0.1' (length=9)
'user' => string 'root' (length=4)
'password' => string '123456' (length=6)
'dbname' => string 'test' (length=4)
array (size=1)
'user' =>
array (size=1)
'observer' =>
array (size=3)
0 => string 'App\Observer\UserAdd1' (length=21)
1 => string 'App\Observer\UserAdd3' (length=21)
2 => string 'App\Observer\UserAdd4' (length=21)
1.可以改用pathinfo这个函数来实现请求分发功能而不是用$_SERVER[PHP_SELF]
/**
* $_SERVER[PHP_SELF]返回的是一段信息,如“/upload/try.php”
* 而后面的则返回一个数组:
* 如:
* $path_parts = pathinfo('index.html');
* echo $path_parts['dirname'], "\n";
* echo $path_parts['basename'], "\n";
* echo $path_parts['extension'], "\n";
* echo $path_parts['filename'], "\n"; // since PHP 5.2.0
* 将返回:
* /upload
* index.html
* html
* index
*/
2.通过配置路由请求