日期:2014-05-17  浏览次数:20828 次

大家帮我看看这个正则错在哪了??
大家帮我看看这个正则错在哪了??

伪静态规则:
RewriteRule ^/so\?k=(\d+)&wd=(.*)&xj=(\d+)&pn=(\d+)$ /sea\.asp\?kid=$1&kw=$2&picxj=$3&page=$4

http://127.0.0.1/sea.asp?kid=5&kw=%D6%B2%CE%EF&picxj=&page=2

转换成

http://127.0.0.1/so?k=5&wd=%D6%B2%CE%EF&xj=&pn=2

后边的xj和pn参数不起作用?更改参数的值无反应。为什么啊?这个是一个搜索的页面。

------解决方案--------------------
^/so\?k=(\d+)&wd=(.*?)&xj=(\d+)&pn=(\d+)$
从前向后匹配
------解决方案--------------------
RewriteRule ^/so\?k=(\d*?)&wd=(.*?)&xj=(\d*?)&pn=(\d*?)$ /sea\.asp\?kid=$1&kw=$2&picxj=$3&page=$4

考虑参数为空的情况
------解决方案--------------------
/so\?k=(\d+)?&wd=(.*)?&xj=(\d+)?&pn=(\d+)? /sea\.asp\?kid=$1&kw=$2&picxj=$3&page=$4
试试这个, 参数可为空, 但不能不存在, 注意缓存问题.
------解决方案--------------------
要放在前面就少用.*否则会匹配所有的了
一般关键字不都只有哪些?不就中文,字母一类的么
至于后面那个位置不一定与前面那个一致
只要$1取对位置就可以了
------解决方案--------------------
正则表达式我看到就怕!!