对于单入口程序当中,往往用地址重写来美化URL地址。例如:
1. 首先要在.htaccess中写一个地址重写
2. 建一个index.php
3. URL路由
如果输入 http://www.meiu.cn/news/list/?type=11&page=2 这样的地址,你将得到 /news/list 这样的值。
这样你可以将news作为控制器,list作为Action。
至于?后面的可以正常用$_GET来获取了。
具体的URL路由,这里就不阐述了,基本就是把问号前的地址explode一下,获得一个数组,然后就方便解决了。
4. 有时候用PHP的CGI方式配置的服务器上不能获取到 PATH_INFO,这样我们就没法获取PATH_INFO了吗?
不是,可以用类似的方法获取
由于CGI方式获取的SCRIPT_NAME也有问题,因此我从Zend Framework里面抽取了一个函数用来获取正确的SCRIPT_NAME,结合PHP_SELF同样可以获取到PATH_INFO。
你可以通过上面的 parsePathInfo() 来获取PATH_INFO。
5. BUG?
在Linux环境下 如果是 /index/test 这样的地址用PATH_INFO只会得到 /test ,PHP_SELF同样也只能得到 /index.php/test,所以无法确定是不是php的一个bug。哪位大大知道的话,方便的话,留个话,解决这个不解之谜。
6. 我的框架
http://code.google.com/p/simplephp/downloads/list
大家可以参考一下。
Via 本站原创
http://www.meiu.cn/news/list/?type=11&page=2
http://www.meiu.cn/news/detail/123
http://www.meiu.cn/news/detail/123
1. 首先要在.htaccess中写一个地址重写
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php|public|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
RewriteEngine on
RewriteCond $1 !^(index\.php|public|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
2. 建一个index.php
3. URL路由
如果输入 http://www.meiu.cn/news/list/?type=11&page=2 这样的地址,你将得到 /news/list 这样的值。
这样你可以将news作为控制器,list作为Action。
至于?后面的可以正常用$_GET来获取了。
具体的URL路由,这里就不阐述了,基本就是把问号前的地址explode一下,获得一个数组,然后就方便解决了。
4. 有时候用PHP的CGI方式配置的服务器上不能获取到 PATH_INFO,这样我们就没法获取PATH_INFO了吗?
不是,可以用类似的方法获取
由于CGI方式获取的SCRIPT_NAME也有问题,因此我从Zend Framework里面抽取了一个函数用来获取正确的SCRIPT_NAME,结合PHP_SELF同样可以获取到PATH_INFO。
function _getScriptPath(){
$filename = basename($_SERVER['SCRIPT_FILENAME']);
if (basename($_SERVER['SCRIPT_NAME']) === $filename) {
$baseScript = $_SERVER['SCRIPT_NAME'];
} elseif (basename($_SERVER['PHP_SELF']) === $filename) {
$baseScript = $_SERVER['PHP_SELF'];
} elseif (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $filename) {
$baseScript = $_SERVER['ORIG_SCRIPT_NAME']; // 1and1 shared hosting compatibility
} else {
$path = $_SERVER['PHP_SELF'];
$segs = explode('/', trim($_SERVER['SCRIPT_FILENAME'], '/'));
$segs = array_reverse($segs);
$index = 0;
$last = count($segs);
$baseScript = '';
do {
$seg = $segs[$index];
$baseScript = '/' . $seg . $baseScript;
++$index;
} while (($last > $index) && (false !== ($pos = strpos($path, $baseScript))) && (0 != $pos));
}
return $baseScript;
}
function parsePathInfo(){
if ( ! isset($_SERVER['PATH_INFO']) || $_SERVER['PATH_INFO'] == ''){
$strlen = strlen(_getScriptPath());
$totallen = strlen($_SERVER['PHP_SELF']);
return substr($_SERVER['PHP_SELF'],$strlen,$totallen);
}else{
return $_SERVER['PATH_INFO'];
}
}
$filename = basename($_SERVER['SCRIPT_FILENAME']);
if (basename($_SERVER['SCRIPT_NAME']) === $filename) {
$baseScript = $_SERVER['SCRIPT_NAME'];
} elseif (basename($_SERVER['PHP_SELF']) === $filename) {
$baseScript = $_SERVER['PHP_SELF'];
} elseif (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $filename) {
$baseScript = $_SERVER['ORIG_SCRIPT_NAME']; // 1and1 shared hosting compatibility
} else {
$path = $_SERVER['PHP_SELF'];
$segs = explode('/', trim($_SERVER['SCRIPT_FILENAME'], '/'));
$segs = array_reverse($segs);
$index = 0;
$last = count($segs);
$baseScript = '';
do {
$seg = $segs[$index];
$baseScript = '/' . $seg . $baseScript;
++$index;
} while (($last > $index) && (false !== ($pos = strpos($path, $baseScript))) && (0 != $pos));
}
return $baseScript;
}
function parsePathInfo(){
if ( ! isset($_SERVER['PATH_INFO']) || $_SERVER['PATH_INFO'] == ''){
$strlen = strlen(_getScriptPath());
$totallen = strlen($_SERVER['PHP_SELF']);
return substr($_SERVER['PHP_SELF'],$strlen,$totallen);
}else{
return $_SERVER['PATH_INFO'];
}
}
你可以通过上面的 parsePathInfo() 来获取PATH_INFO。
5. BUG?
在Linux环境下 如果是 /index/test 这样的地址用PATH_INFO只会得到 /test ,PHP_SELF同样也只能得到 /index.php/test,所以无法确定是不是php的一个bug。哪位大大知道的话,方便的话,留个话,解决这个不解之谜。
6. 我的框架
http://code.google.com/p/simplephp/downloads/list
大家可以参考一下。
| 分类:技 术 知 识



Mysql explain的使
更换了乐之邦沙林高清驱动 - 

改写它的原因是由于自己来负责更新,有了bug自己处理,对于CI我用不惯的地方换成自己习惯的方式,但是我不推荐大家使用我的框架。