URL操作

ThinkPHP 的 URL 操作。主要涉及到 URL 路径大小写、伪静态、生成以及模版中的 U()方法。

一、URL大小写

系统默认的规范是根据 URL 里面的模块名、控制器名来定位到具体的控制器类。比如:

1 http://localhost/demo39/index.php/Home/User/index/id/5

PS:在 windows 平台,URL 中的大小写会自动忽略,但作为开发人员,保持大小写区
分是一个良好的习惯。而 Linux 平台,如果大小写错误,会导致无法定位到指定的模块、
控制器。

在 WeiBo/Common/Conf/config.php 中进行配置:

1 //URL可以不区分大小写
2 ‘URL_CASE_INSENSITIVE‘ =>true

PS:如果开启了不区分大小写,那么对于  UserTypeController.class.php  这样的控
制器就需要如下访问方式:

1 http://localhost/demo39/index.php/home/user_type/index/

如果区分大小写,则是这样:

1 http://localhost/demo39/index.php/Home/UserType/index/

二、URL伪静态

URL 伪静态同城是为了满足更好的 SEO 效果,ThinkPHP 支持伪静态设置。

默认情况下,伪静态后缀为.html

1 http://localhost/demo39/User/index.html
2 http://localhost/demo39/User/index/id/5.html

设置伪静态后缀,默认为html

1 ‘URL_HTML_SUFFIX‘=>‘shtml‘,
1 http://localhost/demo39/User/index.shtml

如果设置为空,那么就任意后缀

1 ‘URL_HTML_SUFFIX‘=>‘‘,

如果设置为空,可以用__EXT__常量获取当前使用的后缀

在 View/User/index.html 中:

1 {$Think.const.__EXT__}

设置可以伪静态的后缀

1 ‘URL_HTML_SUFFIX‘=>‘html|shtml|xml‘,

禁止访问的后缀

1 ‘URL_DENY_SUFFIX‘ => ‘html|pdf|ico|png|gif|jpg‘,

这时如果使用禁止访问的后缀来访问页面的话,页面无任何显示,在页面中查看源代码也无任何显示。

三、URL的生成

为了配合所使用的 URL 模式,我们需要能够动态的根据当前的 URL 设置生成对应的 URL
地址。为此,ThinkPHP 内置了一个 U()方法,用于 URL 的动态生成。

定义格式:U(‘地址表达式‘,[‘参数‘],[‘伪静态后缀‘],[‘显示域名‘])

默认得到当前URL,在 Home/controller/UserController.class.php 中插入以下代码:

1 echo U();             ///demo39/User/index.html

demo39 前面的三条 /// ,两条是注释符,一条是目录符。

地址表达式的格式如下:

[模块/控制器/操作#锚点@域名]?参数 1=值 1&参数 2=值 2...

控制器+方法

1 echo U(‘User/add‘);

输出为: /demo39/index.php/User/add.html ,需要注意的是 echo U(‘User/add‘); 这里面的 User/add 跟它的文件名 UserController.class.php 中的 User

没有任何关系,跟 class UserController extends Controller  也没有任何关系。

全部代码:

1 class UserController extends Controller {
2         public function index() {
3             echo u(‘Member/add‘);
4             $this->display();
5         }
6 }

输出为: /demo39/index.php/Member/add.html 此时浏览器上的地址为: http://localhost/demo39/Home/User/index

控制器+方法+?参数1=值1

1 echo U(‘User/add?id=5‘);

输出为: /demo39/index.php/User/add/id/5.html

模块+控制器+方法+?参数1=值1

1 echo U(‘Admin/User/add?id=5‘);

输出为: /demo39/index.php/Admin/User/add/id/5.html

U()方法第二个参数可以分离参数和值的操作,支持字符串和数组的写法。

使用数组参数1=值1,参数2=值2

1 echo U(‘User/add‘, array(‘id‘=>5,‘type‘=>‘a‘));

输出为:  /demo39/index.php/User/add/id/5/type/a.html

使用字符串参数1=值1,参数2=值2

1 echo U(‘User/add‘,‘id=5&type=a‘);

输出为: /demo39/index.php/User/add/id/5/type/a.html

PS:不允许使用 PATHINFO 模式的路径来编写路径,比如:

1 echo U(‘User/add/id/1/type/a‘);

他会输出: /demo39/index.php/1/type/a.html ,但是这个生成的URL是错误的。

U()方法第三个参数可以指定伪静态后缀,比如:

1 //指定伪静态后缀
2 echo U(‘User/add‘, array(‘id‘=>5),‘xml‘);

输出为: /demo39/index.php/User/add/id/5.xml

在 WeiBo/Common/Conf/config.php 设置 ‘URL_MODEL‘=>0 ,普通模式后

1 echo U(‘User/add‘, array(‘id‘=>5),‘xml‘);

URL生成将如下: /demo39/index.php?m=&c=User&a=add&id=5

设置 ‘URL_MODEL‘=>1 ,PATHINFO模式后URL生成将如下:

输出为: /demo39/index.php/User/add/id/5.html

设置 ‘URL_MODEL‘=>2 ,REWRITE模式后URL生成将如下:

输出为: /demo39/User/add/id/5.html

注意这时连 index.php 都省掉了。

设置 ‘URL_MODEL‘=>3 ,兼容模式后URL生成将如下:

输出为: /demo39/index.php?s=/User/add/id/5.html

PS:在这里我们使用 REWRITE 重写模式,它是 PATHINFO 的升级版,地址最短。

我们也可以生成路由地址,使用路由的规则生成的地址:

在下面的数组里面写。

‘URL_ROUTE_RULES‘ => array(
        ), 

(其实不在里面写的效果测试了是一样的,但还是服从规范吧)

在 WeiBo/Common/Conf/config.php 中:

1 //规则路由
2 ‘u/:id\d‘=>‘User/index‘,

在 Home/controller/UserController.class.php 中:

1 //生成规则路由地址
2 echo U(‘/u/5‘);

输出为: /demo39/index.php/u/5.html

生成正则路由地址

1 ‘/^u_(\d+)$/‘=>‘User/index?id=:1‘,

在  Home/controller/UserController.class.php  中:

1 echo u(‘/u_5‘);

输出为: /demo39/index.php/u_5.html

1 echo u(‘/u/5‘);

也会输出: /demo39/index.php/u/5.html

域名支持:

1 echo U(‘User/[email protected]?id=5‘);

则输出为: http://www.ycuk.com/demo39/index.php/User/add/id/5.html ,这时在 WeiBo/Common/Conf/config.php 不用其他配置。

add后面有@符号,不要忘了写

锚点支持

1 echo U(‘User/add#comment?id=5‘);

输出为: /demo39/index.php/User/add/id/5.html#comment

四、模版中的U

我们之前使用 U()方法,都是在控制器里实现的。但实际用途中,大量的超链接是在模
版中设置的,而在控制器把 U()当变量传递过去,有点过于繁杂。所以,我们可以在模版使

用使用 U()方法。

1 在模版中使用U()方法
2 {:U(‘User/add‘, array(‘id‘=>5))}

这时 Home/controller/UserController.class.php 中的代码为:

 1 <?php
 2
 3 namespace Home\Controller;
 4 use Think\Controller;
 5
 6 class UserController extends Controller {
 7         public function index() {
 8             $this->display();
 9         }
10 }

如果没有 $this->display(); ,则 View/User/index.html 里没有任何显示。

时间: 2024-10-26 01:00:00

URL操作的相关文章

js原生的url操作函数,及使用方法。(附:下边还有jquery对url里的中文解码函数)

js原生的url操作函数,完善的. /*****************************/ /* 动态修改url */ /*****************************/ var LG=(function(lg){ var objURL=function(url){ this.ourl=url||window.location.href; this.href="";//?前面部分 this.params={};//url参数对象 this.jing="&q

jQuery 工具类函数-URL操作函数

调用名为$. param的工具函数,能使对象或数组按照key/value格式进行序列化编码,该编码后的值常用于向服务端发送URL请求,调用格式为: $. param (obj); 参数obj表示需要进行序列化的对象,该对象也可以是一个数组,整个函数返回一个经过序列化编码后的字符串. <body> <div id="divtest"> <div class="title"> <span class="fl"

php 对url 操作类:url拼接、get获取页面、post获取页面(带传参)

/* * @brief url封装类,将常用的url请求操作封装在一起 * */ class URL{ private $error; public function __construct(){ $this->error = new ErrorCase(); } /** * combineURL * 拼接url * @param string $baseURL 基于的url * @param array $keysArr 参数列表数组 * @return string 返回拼接的url */

ThinkPHP3.2基础教程(34)--URL操作

URL大小写 系统默认的规范是根据URL里面的模块名.控制器名来定位到具体的控制器类的,从而执行控制器类的操作方法. 如果是Windows环境,无论大小写如何都能定位到,如果在Linux环境下面,一旦大小写不一致,就会发生URL里面使用小写模块名不能找到模块类的情况.但是系统本身提供了一个不区分URL大小写的解决方案,可以通过配置简单实现. 只要在项目配置中,增加: 'URL_CASE_INSENSITIVE' =>true 配置好后,即使是在Linux环境下面,也可以实现URL访问不再区分大小

jstl---&gt;Core 核心标签库-&gt;URL操作

-->import.param.URL.redirect <c:import>将静态或动态文件包含至本身jsp页面 而他与<jsp:include>的最大差别在于<jsp:include>只能包含和自己同一个web application的文件外,而<c:import>不仅...还可以包含不同web application或者其他网站的文件 语法1: <c:import url="url" [context="con

URL 操作

1.$.param()将对象键值对转换为 URL 字符串键值对 var obj = { name : 'Lee', age : 100 }; alert($.param(obj));

URL的转义和解析

在开始python编程之前我们先来看看一个关与url的知识 在url中会有一些特殊字符,如果你写过cgi程序,并且提交一个表单去调用你的cgi,你会很清楚的 像?name=aiqier&age=21这样的参数传递 下面总结一下常见的url特殊字符的含义 空格换成加号(+) 正斜杠(/)分隔目录和子目录 问号(?)分隔URL和查询 百分号(%)制定特殊字符 #号指定书签 &号分隔参数 如果需要在URL中用到,需要将这些特殊字符换成相应的十六进制的值 字符                   

Hadoop读书笔记(三)Java API操作HDFS

Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的shell操作:http://blog.csdn.net/caicongyang/article/details/41253927 JAVA URL 操作HDFS OperateByURL.java package hdfs; import java.io.InputStream; import jav

NodeJS之Url的使用

一.通过http模块中的request事件可以得到在服务端拿到客户端的有关url的数据(req.url),其中req.url得到的数据是端口号后的所有路径,之后通过调入url模块对获取到的req.url进行操作.再通过url下的parse()方法,获得与该路径的所有相关信息,其中pathname(路径名称)通过不同的路径名称可以调用不同的页面. 测试路径为:http://localhost:8085/user req.url操作获得:/user url.parse(req.url)操作获得: 二