Php Url规划-单入口程序伪静态实现方法

jackxiang 2010-3-18 17:16 | |
伪静态已经不是一个新鲜的名词了,尤其是在现今SEO的炒作中。如何实现伪静态这是每个程序员都关心的问题,除非您不搞SEO。大多的伪静态都是以Htaccess(Apache mod_rewrite)来实现的,但是一个规划不太好的网站要用Htaccess实现,需要写一大堆的代码,而还有某种原因我们不得不放弃Htaccess,或是由于服务器不支持,或是个人偏好等等。

对于单入口(访问网站必需首先通过某一文件,一般都是index.php来实现其它功能的项目)程序来说:

常见的Url大都为:http://www.phplamp.org/index.php?controller=posts&action=index

说实话这样的URL很难看,最重要的是搜索引擎不认它为正常的URL,这很可怕。如何实现一个好看的且与搜索引擎能攀上亲的URL呢。

看这个URL:http://www.phplamp.org/index.php/posts/index/

很新奇的URL创意,这也是我在使用CakePHP框架的过程中体验出来的,此URL相对于彼URL来说:易记,美观,最主要的是搜索引擎虽不认它为老爸,起码不会把它划为黑名单。

解释一下上面的URL,"posts":一般称其为Controller(控制器),由它来决定加载哪个处理文件;"index":一般称其为Action(操作),由它来决定要进行什么操作。所以/posts/index/顾名思义就是posts的主页了。如果后面需要传递参数可以直接加在Action后面。

如下面这个URL:http://www.phplamp.org/index.php/posts/category/1/。列出posts的分类ID为1下的所有内容。

以下是随手写的一个函数来处理这种情况,写的比较匆忙,没进行太多的测试,如发现问题请与我联系。



   1. <?php  
   2. function uri() {  
   3.     // 获取请求的URI  
   4.     foreach (array("REQUEST_URI", "HTTP_X_REWRITE_URL", "argv") as $var) {  
   5.         if ($uri = $_SERVER[$var]) {  
   6.             if ($var == "argv") {  
   7.                 $uri = $uri[0];  
   8.             }  
   9.             break;  
  10.         }  
  11.     }  
  12.        
  13.     // 去除//情况  
  14.     $uri = str_replace("//", "/", $uri);  
  15.        
  16.     // 去掉index.php  
  17.     if (strpos($uri, "index.php") !== false) {  
  18.         $uri = explode("index.php", $uri, 2);  
  19.     }  
  20.        
  21.     // 如果没有请求的字符串返回  
  22.     if (!isset($uri[1])) {  
  23.         return array("controller" => '', "action" => '');  
  24.     }  
  25.        
  26.     // 分解  
  27.     $uriBak = explode("/", $uri[1]);  
  28.     unset($uri);  
  29.        
  30.     // 去除空项  
  31.     foreach ($uriBak as $val) {  
  32.         if ($val) {  
  33.             $uri[] = $val;  
  34.         }  
  35.     }  
  36.        
  37.     list($controller, $action) = $uri;  
  38.        
  39.     $params = array();  
  40.     if (count($uri) > 2) {  
  41.         array_shift($uri);  
  42.         array_shift($uri);  
  43.     }  
  44.     $params = $uri;  
  45.        
  46.     return  
  47.     array(  
  48.         "controller" => $controller,  
  49.         "action" => $action,  
  50.         "params" => $params,  
  51.     );  
  52. }  
  53.  
  54. print_r(uri());  
  55. ?>  




来源:http://www.phplamp.org/2009/04/php-url-index-php-htaccess/

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2836/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2010-3-18 17:17
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]