仿58同城的伪静态写法
IIS下的伪静态,想仿58同城的二手房频道做伪静态,碰到的疑问?
例:当用户只按房源价格索时,可以这样写:
RewriteRule /esf/price(\d+)/ /esf\.asp?price=$1 [N,I]
那么,用户在按房源搜索后,继续按面积搜索的时候,我想做成:
RewriteRule /esf/price(\d+)mianji(\d+)/ /esf\.asp?price=$1&mianji=$2 [N,I]
如果搜索条件少,这样写几条是没问题的,但是搜索条件还会有很多,然后每个条件下还有分页,我想肯定有优质的写法,因为对正则这块不熟悉,一点头绪都没有。
最终想实现的效果如58同城:
http://bj.58.com/ershoufang/e3i2k2y2/
http://bj.58.com/ershoufang/e3i2k2y2/pn20/
http://bj.58.com/ershoufang/e3k2y2/
http://bj.58.com/ershoufang/i2k2/pn5/
他这里面的e3,i2,k2,y2都是不同的搜索条件,pn20是分页的第20页结果,
每次的组合不同,有可能只出现一个或多个。
不知道有没有懂我的意思?
感谢大家。
------解决方案--------------------你是说,你的重写规则是每一个条件一条重写而58是把所有的条件写到一条重写规划中?
------解决方案--------------------假设你最多就4个,不够你再加
RewriteRule /esf(?:/(\w+)(\d+))?(?:/(\w+)(\d+))?(?:/(\w+)(\d+))?(?:/(\w+)(\d+))? /esf\.asp?$1=$2&$3=$4&$5=$6&$7=$8
------解决方案--------------------告诉你一个我的思路
1. 伪静态组件
把后面所有值 e3i2k2y2/pn20 直接传给 test.asp
RewriteRule ^/ershoufang/(.*)$ /test\.asp?$1
2. 程序再识别 Request.QueryString
如上: s = Request.QueryString
s = e3i2k2y2/pn20
正则示例: ([a-z]+)(\d+)
可读取 e:3 i:2 pn:20 ....
参数这样就可以随心控制。