ThinkPHP - URL - 伪静态 - 路由 - 重写

URL:
一、URL规则
        1、默认是区分大小写,可以修改(配置文件)为不区分大小写。
        2、    //修改URL大小写问题
            'URL_CASE_INSENSITIVE' =>true,
            如果模块名为 UserGroupAction,因为过于复杂。
            那么url着模块就必须要写成:
            http://localhos/thinkphp/index.php/user_group/index  (user与group之间有下划线)
        3、如果 'URL_CASE_INSENSITIVE' =>false,
            那么url的模块可以直接写成:
            http://localhos/thinkphp/index.php/UserGroup/index
二、URL伪静态
        1、默认的ThinkPHP已经为我们开启了伪静态,
            可以直接在地址栏输入:http://localhos/thinkphp/index.php/UserGroup/index.html
        2、可以限制伪静态的后缀:
            'URL_HTML_SUFFIX'=>'html|shtml|xml' // 多个用 | 分割
三、URL路由
        1、要使用路由规则,那么URL模式要为 PATH_INFO模式
        2、在配置文件中,开启路由支持,并书写路由规范。
            - 规则表达式配置路由
                'URL_ROUTER_ON'=>true,
                'URL_ROUTE_RULES'=>array(
                    //静态地址路由,没有动态的变量。
                    //可以这样访问【 URL:http://localhost/thinkphp2/index.php/my 】
                    'my'=>'Index/index',
                    
                    
                    //动态地址路由
                    //加上 \d代表类型只能是数字
                    'year/:year\d/:month\d/:date\d'=>'Index/index',//动态和静态混合地址路由
                    // 加上$说明地址中只能是 my/1000后面不能有其他内容了
                    'my/:id$'=>'Index/index',
                    
                    
                    
                    //动态静态混合地址路由,有动态的变量,也有静态值,动态变量 [ :num ],可以以GET传参的方式,交给Index/index,模块中的方法。
                    //可以这样访问【 URL:http://localhost/thinkphp2/index.php/id/23 】
                    // 后台 $_GET['num'],即可获得id的值。(id是名称,num是id的值)
                    'id/:num'=>'Index/index',
                ),
                
            - 正则表达式配置路由
                '/^year\/(\d{4})\/(\d{2})\/(\d{2})/'=>'Index/index?year=:1&month=:2&date=:3'
            
            - 注意事项:
                1.越复杂的路由越往前面放
                    'URL_ROUTE_RULES'=>array(
                    'my/:year/:month/:day'=>'Index/day',
                    'my/:id\d'=>'Index/index',
                    'my/:name'=>'Index/index',
                    )
                2.可以使用$作为完全匹配的路由规则
                        'URL_ROUTE_RULES'=>array(
                            'my/:id\d$'=>'Index/index',
                            'my/:name$'=>'Index/index',
                            'my/:year/:month:/:day$'=>'Index/day',
                ),
                3.用正则匹配的方式
                    'URL_ROUTE_RULES'=>array(
                    '/^my\/(\d+)$/'=>'Index/index?id=:1',
                    '/^my\/(\w+)$/'=>'Index/index?name=:1',
                    '/^my\/(\d{4})\/(\d{2})\/(\d{2})$/'=>'Index/day?year=:1&month=:2&day=:3',
                    ),
    
            
四、URL重写
        通常的URL里面含有index.php,为了达到更好的SEO效果可能需要去掉URL里面的index.php ,
        通过URL重写的方式可以达到这种效果,通常需要服务器开启URL_REWRITE模块才能支持。
        
        下面是Apache的配置过程,可以参考下:
            1、httpd.conf配置文件中加载了mod_rewrite.so模块
            2、AllowOverride None 将None改为 All
            3、确保URL_MODEL设置为2
            4、把下面的内容保存为.htaccess文件放到入口文件的同级目录下
                <IfModule mod_rewrite.c>
                RewriteEngine on
                RewriteCond %{REQUEST_FILENAME} !-d
                RewriteCond %{REQUEST_FILENAME} !-f
                RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
                </IfModule>
            
        重启Apache之后,原来的
        http://serverName/index.php/Blog/read/id/1
        就可以通过访问
        http://serverName/Blog/read/id/1
        简化了URL地址。
        
        
五、URL生成

  参考手册

 

URL路由:

  • www.***.com/c_23.html,进入列表页
  • www.***.com/34.html,进入内容页
    //URL路由
    'URL_ROUTER_ON' => true,
    'URL_ROUTE_RULES' => array(
        '/^c_(\d+)$/' => 'Home/List/index?id=:1',//前面要加上Home项目名
        '/^(\d+)$/'   => 'Home/Show/index?id=:1',
    ),

 

posted on 2016-02-04 16:42  ultrastrong  阅读(644)  评论(0编辑  收藏  举报