TP SEO

本文通过实例展示了ThinkPHP框架中实现SEO友好URL的方法,包括URL路由、空操作及空模块的应用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

我们来通过一个简单的例子,分别用URL路由、空操作和空模块三个角度来实现,由此来看ThinkPHP对SEO和URL友好的支持到底有多方便。
因为URL_REWRITE比较特殊,需要服务器支持,所以下面的例子不涉及URL_REWRITE,所以比较具有通用性。
例子说明如下:
如果我们有一个City模块,而我们希望能够通过类似下面这样的URL地址来访问具体某个城市的操作:
http://<serverName>/index.php/City/shanghai/  

一、使用URL路由功能实现
由于shanghai这个操作方法是不存在的,我们给相关的城市操作定义了一个city方法,如下:

  1. Class CityAction extends Action{
  2. public function city(){
  3. // 读取城市名称
  4. $cityName = $_GET[‘name’];
  5. Echo (‘当前城市:’.$cityName);
  6. }
  7. }

复制代码

接下来我们来定义路由文件,实现类似于
http://<serverName>/index.php/City/shanghai/ discount louis vuitton handbags
这样的解析,路由文件名称是routes.php 放在项目的Conf目录下面,内容如下:
Return array(
‘City’=>array(‘City’,’city’,’name’);
);
这样,URL里面所有的City模块(其实已经不是City模块了,而是一个路由定义)都会被路由到City模块的city操作,而后面的第二个参数会被解析成 $_GET[‘name’]
接下来,我们就可以在浏览器里面输入
http://<serverName>/index.php/City/beijing/
http://<serverName>/index.php/City/shanghai/
http://<serverName>/index.php/City/shenzhen/
会看到依次输出的结果是:
当前城市:beijing
当前城市:shanghai
当前城市:shenzhen

二、空操作实现
同样是上面的例子,我们用空操作的思路来实现。
我们定义了一个CityAction类,代表了City模块,而我们希望能够通过类似下面这样的URL地址来访问具体某个城市的操作:
http://<serverName>/index.php/City/shanghai/
由于第二个参数表示的含义是City模块的操作名称,我们不可能给每个城市都定义一个操作方法,那样的工作量将是相当巨大的(尤其是在中国,呵呵~),当 然,我们可以利于URL路由功能来解决这个问题。但是我们还可以用空操作来更加高效地解决这个问题,我们来看下具体如何实现。
我们只需要给CityAction类定义一个_emtpy (空操作)方法:

Class CityAction extends Action{
Public function _empty(){
// 把所有城市的操作都解析到city方法
// 注意city方法本身是protected方法
$cityName = ACTION_NAME;
$this->city($cityName);
}
Protected function city($name){
// 和$name 这个城市相关的处理
Echo (‘当前城市:’.$name);
}
}

接下来,我们就可以在浏览器里面输入discount nike air shoes
http://<serverName>/index.php/City/beijing/
http://<serverName>/index.php/City/shanghai/
http://<serverName>/index.php/City/shenzhen/
会看到依次输出的结果是:
当前城市:beijing
当前城市:shanghai
当前城市:shenzhen

三、空模块实现
现在需求进一步,要求我们把URL由原来的
http://<serverName>/index.php/City/shanghai/
变成
http://<serverName>/index.php/shanghai/
这样更加简单的方式,如果按照传统的模式,我们必须给每个城市定义一个Action类,然后在每个Action类的index方法里面进行处理。
可是如果使用空模块功能,这个问题就可以迎刃而解了。
我们可以给项目定义一个EmptyAction类

Class EmptyAction extends Action{
Public function index(){
// 根据当前模块名称来判断要执行哪个城市的操作
$cityName = MODULE_NAME;
$this->city($cityName);
}
Protected function city($name){
// 和$name 这个城市相关的处理
Echo (‘当前城市:’.$name);
}
}

接下来,我们就可以在浏览器里面输入
http://<serverName>/index.php/beijing/
http://<serverName>/index.php/shanghai/
http://<serverName>/index.php/shenzhen/
会看到依次输出的结果是:
当前城市:beijing
当前城市:shanghai
当前城市:shenzhen

转载于:https://www.cnblogs.com/imadin/archive/2011/05/19/2051160.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值