正则式 url rewrite 急!!!

014zx 2008-04-10 11:47:33
RewriteRule ^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html /index.php\?controller=$1&action=$2&$3=$4&$5=$6&$7=$8
按以上规则
http://www.xxx.com/user/show/name/tom/sex/1/age/25.html
可以解释为
http://www.xxx.com/index.php?controller=user&action=show&name=tom&sex=1&age=25

由于需要还要加一个参数,希望达到以下效果
http://www.xxx.com/user/show/name/tom/sex/1/age/25/from/china.html
解释为
http://www.xxx.com/index.php?controller=user&action=show&name=tom&sex=1&age=25&from=china

规则添加如下
RewriteRule ^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html /index.php\?controller=$1&action=$2&$3=$4&$5=$6&$7=$8&$9=$10
按以上规则
http://www.xxx.com/user/show/name/tom/sex/1/age/25/from/china.html
却解释为
http://www.xxx.com/index.php?controller=user&action=show&name=tom&sex=1&age=25&from=user0

也就是正则式里的$10被看做是$1加上'0'的字符串了,而不是想要的第十个参数

请教$10该怎么改写?

...全文
226 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
014zx 2008-04-22
  • 打赏
  • 举报
回复
呵呵,谢谢了

这个解决了我另外一个问题~~

结贴
laruence 2008-04-21
  • 打赏
  • 举报
回复
当天=当前 汗,,紫光老出错
laruence 2008-04-21
  • 打赏
  • 举报
回复
不是,你看看apache手册么,:)

是如果当前规则匹配,则执行当天的rewrite rule, 并继续下一条规则。
如果当前规则不匹配,就跳过下一条规则
014zx 2008-04-21
  • 打赏
  • 举报
回复
[C]的意思是不是这样:
如果当前规则匹配,就不比较下一条了

如果当前规则不匹配,就继续比较下一条
laruence 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 014zx 的回复:]
还有为什么这么写/$9.html\?,我要链入的页面是index.php啊
RewriteRule ^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html /$9.html\?controller=$1&action=$2&$3=$4&$5=$6&$7=$8 [NC, C]
[/Quote]

哦,那个我写错了,:)

[C]的意思是, 如果满足当天这条规则,那么继续下一条规则。

[NC]是大小写不敏感,其实这里无所谓,只是我写习惯了。
014zx 2008-04-18
  • 打赏
  • 举报
回复
还有为什么这么写/$9.html\?,我要链入的页面是index.php啊
RewriteRule ^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html /$9.html\?controller=$1&action=$2&$3=$4&$5=$6&$7=$8 [NC, C]
014zx 2008-04-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 laruence 的回复:]
RewriteRule ^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html /index.php\?controller=$1&action=$2&$3=$4&$5=$6&$7=$8&$9=$10

改写成这样。
RewriteRule ^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html /$9.html??controller=$1&action=$2&$3=$4&$5=$6&$7=$8 [NC, C]
RewriteRule ^/(.*)/(.*)/\.html /index.php?$1=$2 [NC, L]


给分。。。
[/Quote]

谢谢,内否说一下 [NC, C] [NC, L] 的作用
问题解决马上给分~~
willsan 2008-04-17
  • 打赏
  • 举报
回复
简单点,还是多参数合并,然后取值时候在拆分吧,就是接口有变化了,可以接受
laruence 2008-04-17
  • 打赏
  • 举报
回复
哦,第4行多了个问号。
laruence 2008-04-17
  • 打赏
  • 举报
回复
RewriteRule ^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html /index.php\?controller=$1&action=$2&$3=$4&$5=$6&$7=$8&$9=$10

改写成这样。
RewriteRule ^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html /$9.html??controller=$1&action=$2&$3=$4&$5=$6&$7=$8 [NC, C]
RewriteRule ^/(.*)/(.*)/\.html /index.php?$1=$2 [NC, L]


给分。。。
014zx 2008-04-17
  • 打赏
  • 举报
回复
自己顶一下
014zx 2008-04-16
  • 打赏
  • 举报
回复
望赐教
014zx 2008-04-16
  • 打赏
  • 举报
回复
谢谢,大家的建议,实际中也是这么做的

[Quote=引用 8 楼 jiaping108 的回复:]
首先,$0还没有使用;其次,建议可以把两个参数合并成一个参数
[/Quote]

还有一个问题 $0 怎么用?

RewriteRule ^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html /index.php\?controller=$1&action=$2&$3=$4&$5=$6&$7=$8&$9=$0

测试网址:
http://www.xxx.com/user/show/name/tom/sex/1/age/25/from/china.html
打印传递数据name,sex,age都很正常,而from的内容却是/user/show/name/tom/sex/1/age/25/from/china.html

我感觉$0是取了^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html这个值
而不是想要的最后一个(.*)

RewriteRule ^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html /index.php\?controller=$0&action=$1&$2=$3&$4=$5&$6=$7&$8=$9
把$0放前面也是不行的

「已注销」 2008-04-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 myvicy 的回复:]
针对你这个可以把sex和age合并成一个参数然后到后台去拆分一下.
sex应该是1或0,到后台取合并参数的第一位做性别其他的做年龄.
[/Quote]

同意此做法。

把所有的参数,一锅烩了,到后台 split(explorde)一下即可。没必要受这罪。

@_@
014zx 2008-04-11
  • 打赏
  • 举报
回复
自己顶

再加一百分~~
myvicy 2008-04-11
  • 打赏
  • 举报
回复
或者你也可以把参数的位置固定,然后路径里不要参数名,这样写.
RewriteRule ^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html /index.php\?controller=$1&action=$2&name=$3&sex=$4&age=$5&from=$6
按以上规则来解释
http://www.xxx.com/user/show/tom/1/25/china.html
myvicy 2008-04-11
  • 打赏
  • 举报
回复
或者你也可以把参数的位置固定,然后路径里不要参数名,这样写.
RewriteRule ^/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)\.html /index.php\?controller=$1&action=$2&name=$3&sex=$4&age=$58&from=$6
按以上规则来解释
http://www.xxx.com/user/show/tom/1/25/china.html

myvicy 2008-04-11
  • 打赏
  • 举报
回复
针对你这个可以把sex和age合并成一个参数然后到后台去拆分一下.
sex应该是1或0,到后台取合并参数的第一位做性别其他的做年龄.
jiaping108 2008-04-11
  • 打赏
  • 举报
回复
首先,$0还没有使用;其次,建议可以把两个参数合并成一个参数
Unending 2008-04-10
  • 打赏
  • 举报
回复
没有你要的$10
只有$0…$9
加载更多回复(5)

24,923

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Apache
社区管理员
  • Apache
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧