Jake请进:有关SEO的问题

#1 xcabc

看了SpeedPHP的代码,觉得sp有很多地方值得学习,是个很有特点的框架,比如对数据的缓存,对页面的生成处理等。
对SEO这块我还不是很清楚,请教下:

sp可以使用扩展的方式对url进行以path_info方式进行rewrite,如将view?cat=x1&id=x2解析为view/cat/x1/id/x2。
但现在需求是解析为view/x1/x2,是否可以通过挂接url_special的方式完成解析?
如果是:对spUrl函数是否也要做改造,对静态页面的生成是否也要做同样的改造?如何在不修改核心代码的情况下实现此功能?

再引申一下:如果在项目中有多种不同的SEO方式,而没有统一的规则可循,是否要对不同的入口挂接不同的url_parserx?

2010-11-15 15:24:14

#2 jake

下面介绍一下,先打开最新SP的Extensions目录中的spUrlRewrite.php文件注释内容对照来看看。
然后看看实现你的想法的步骤:
比如说原链接:index.php?c=main&a=view&cat=x1&id=x2 (控制器main,动作view,和两个参数)

首先在入口文件的spConfig中加入配置

'launch' => array(
'router_prefilter' => array(
array('spUrlRewrite', 'setReWrite'),
),
'function_url' => array(
array("spUrlRewrite", "getReWrite"),
),
),


要变成:main/view/cat/x1/id/x2
在spConfig继续加入配置:

'ext' => array(
'spUrlRewrite' => array(
'suffix' => '', // 为空
'sep' => '/',
),
),


要变成:view/x1/x2
上面的配置需要改成

'ext' => array(
'spUrlRewrite' => array(
'suffix' => '', // 空
'sep' => '/',
'map' => array(
'view' => 'main@view', // 把main/view 映射成view
),
'args' => array(
'view' => array('cat', 'id'), // 还是在view这个映射上,第一个参数将等于cat,第二个参数将等于id
),
),
),


在使用以上配置的时候,spUrl不需要改动,直接是spUrl('main', 'view', array('cat'=>'x1', 'id' => 'x2'))即可生成。
smarty中是<{spUrl c=main a=view cat='x1' id='x2'}>

另外,务必要确定服务器开启URL_REWRITE功能和支持.htaccess(linux),并且在.htaccess中已经有以下的内容


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L]

2010-11-15 15:51:40

#3 jake

如果需要多种静态链接,可以通过调整“映射”来进行,

'view' => 'main@view', // 把main/view 映射成view
'type' => 'cat@index', // 把cat/index映射成type

比如说view/1232.html就是查看文章,type/123.html就是查看分类等等。

2010-11-15 16:03:35

#4 xcabc

明白了,老大的回帖真是神速啊!感激~~~

2010-11-15 16:23:39

#5 xcabc

还有还有,能够动态生成映射么????

2010-11-15 16:25:43

#6 jake

还有还有,能够动态生成映射么????
xcabc 发表于 2010-11-15 16:25
设置方面,在程序中动态地改变是不可行的,不过有以下的方法:

把url_rewrite的ext部分配置独立到一个文件中(如何凑拼配置可以搜索论坛内的文章),然后程序对该文件进行直接的写入修改,就可以达到“动态修改”路由系统配置的效果了。当然,这是不推荐的,一般网站的URL格式都是预先就设定而且只会增加很少修改的。

2010-11-15 16:47:24