urlrewrite高手进

我用asp做的网站.现在需要加入urlrewrite技术.一直很顺利.但是做到分页的时候遇到了一个问题.正则表达式如下:
RewriteRule ^/relist-([0-9]+)-([\s\S\w\W]+|(.*))-([\s\S\w\W]+|(.*))-([\s\S\w\W]+|(.*)).html$ /resume_list.asp?page=$1&job_area=$2&job_kind=$3&age=$4
因为我是自学的这个技术.有些地方不太明白.我理解的$1$2的意思就是顺序.比如$1就是第一个需要改写的位置.然后前面的正则表达式一一匹配.中间用一条"-"隔开.但是我在页面中获取他们的时候遇到了麻烦.
page = request("page")
job_area = request("job_area")
job_kind = request("job_kind")
age = request("age")
这样获取的话第一个page和第二个job_area是获取对了.但是job_kind 和age却获取错误.正则改写的$3的位置传递的值让request("age")给获取过去了.也就是age的值变成了job_kind的值了.而且job_kind没有值.
请教高手在重写的url中如果有多个参数的时候是否可以重写?如果可以.那么写正则表达式的时候是否有与后面的$1$2这些有对应的方法? 我写的代码如何更改就可以在页面中获取所有的参数了?谢谢.如果试验正确.再多给分!
按照1楼的说法改了以后正常了.但是又多加了一个参数以后.下面的问题:
RewriteRule ^/relist-([0-9]+)-([\s\S\w\W]+|(.*))-([\s\S\w\W]+|(.*))-([\s\S\w\W]+|(.*))-([\s\S\w\W]+|(.*))-([0-9]+|(.*)).html$ /resume_list.asp?page=$1&job_area=$2&job_kind=$4&age=$6&user_specialty=$8&salary=$10 这样以后我在页面中选择工资后搜索..然后点下一页的时候会找不到页面.是否是我的正则写错了?还是其他的原因?页面中的链接是这样写的:"relist-"& page+1 &"-"& job_area &"-"& job_kind &"-"& age &"-"& user_specialty &"-"& salary &".html" 如果我把salary=$10和-([0-9]+|(.*))去掉就能找到页面了.加上以后这里就找不到页面了.难道带参数还有限制个数吗?我大概要带8个参数.现在写到第6个就出现这个问题了.这个如何解决?
最新回答
小卟忍则乱我心

2024-10-15 16:54:20

1.正则表达式只能匹配$1~$9,多了取不到。
2.我下面已经给出怎样排除括号截取的方法。
3.正常的url很少有传这么多参数的,建议你考虑用form传参而不是用url传参。

——————————
是的。正则表达式中一对括号截取一个值,按括号出现的先后顺序分别赋给$1~$9。
你也可以把(.*)变成(?:.*),这样正则表达式就不截取括号中的值了,此时你可以用原先的url。
——————————
恩,多个参数肯定是可以重写的。
$中截取的应该是你的正则表达式中截取的值,也就是括号截取的值,一对括号截取一个值。
在你的例子里,
([0-9]+)对应的是$1
([\s\S\w\W]+|(.*))对应的是$2
(.*)对应的是$3
([\s\S\w\W]+|(.*))对应的是$4
所以如果你的正则没错的话,可以这样:
resume_list.asp?page=$1&job_area=$2&job_kind=$4&age=$6