spUrlRewrite 是否支持正则表达式

#1 btboy

根据教程,我们是这样做的:
  • 网址映射,比如 'search' => 'main@search',将使得 http://www.example.com/search.html 转向控制器main/动作serach执行。
  • 特例 '@' => 'main@no' 如果映射是@,将使得符合以下条件的网址转向到 控制器main/动作no执行:1. 在map中无法找到其他映射,2. 网址第一个参数并非控制器名称。
我现在的需求是, 我希望我的地址 http://www.example.com/main/search.html 就指向控制器main动作search,而http://www.example.com/main/就指向控制器main动作index,不知道在这里是否可以实现。


我尝试了
'main/*' => 'main@*' 是可以实现的,但是对于 http://www.example.com/main/ 就会报错了,就不会去调用index方法。




2011-02-14 18:54:28

#2 jake

http://www.example.com/main/这样不行,因为“/”是分隔符。
以下两种是可以的,不过要先从SVN中下载最新的spUrlRewrite
http://www.example.com/main.html
http://www.example.com/main

2011-02-14 20:43:06

#3 btboy

http://www.example.com/main/  和 http://www.example.com/main  2个地址请求的应该是一样的吧?

然后我希望地址转化成: http://www.example.com/control/action  这种效果,如果上面的方法不能实现,可以有其他解决办法没?

2011-02-15 09:27:28

#4 jake

http://www.example.com/control/action
这个可以分隔符是“/”,后缀为空就可以。
然后省略了index就是
http://www.example.com/main

一定要加上个斜杠,那没办法,因为从逻辑上讲:
http://www.example.com/main/  和 http://www.example.com/main 请求的地址不一样,加了斜杠就是目录,不加的时候可以是文件也可以是目录。这里当文件看了。

2011-02-15 09:51:00

#5 btboy

下载了最新的spUrlRewrite, 配置成功了。 非常感谢。 我的代码是:

'map' => array(
                                'user/' => 'user@index',
                                'user/*' => 'user@*',
                               
           ),


而且http://www.example.com/main这个也是可以运行的,我想有2种情况,一个是浏览器自动加上了这个“/”,我使用的是chrome和ie。 另外一个就是因为找不到main这个文件,于是就请求了main/文件夹


感谢Jake的及时回复。

2011-02-15 10:05:16

#6 jake

:handshake 我也研究研究:lol

2011-02-15 10:47:17

#7 btboy

:lol , 主要是我希望把地址按照REST的方式来定义,这样更好管理,而且也更清晰,也能够充分的反应我们的程序设计结构。

比如我们来说一个网站:
http://example.com/
下面就是他的所有资源。相当于一个索引

然后 http://example.com/user 就是他的所有用户,然后http://example.com/user/{id},应该就是 用户{id}的所有资源, 那么http://example.com/user/{info}就可以表示他的基本信息, /user/reg/就是注册用户,但是这里就有个冲突: /user/reg/ 和 /user/{id}可能会重复,因此我们可以修改下 /user/resource/{id}是表示这个用户的所有资源。 然后 /user/reg 表示注册, /user/login 表示登录


然后视频资源可以使用, example.com/video 来表示所有的视频。

在实际使用REST方式的时候,有时候还是需要变通下,不能完全按照REST方式来。 比如HTTP是支持put,post,get,delete用来更新,上传,获取,删除资源。 但是网页上不是这么操作。

2011-02-15 11:00:03

#8 jake

URL在WEB系统上面,更多的应该是SEO优化,而不是反映程序设计结构。而且从安全性考虑,程序的设计结构是最好不要被人知道。

SEO优化要注意的,是URL的可读性和容易理解。而且建议不要过多在URL上面使用“/”斜杠,因为搜索引擎会认为斜杠是目录,越深目录下的页面,就越不重要,那这样导致页面权重不高了。

建议用“-”或者“_”,这样所有页面可以和根目录保存一致,这样更有利于SEO,而且模板中的路径还不需要改动。

2011-02-15 11:24:28