日期:2014-05-16  浏览次数:20793 次

仿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同城 伪静态

------解决方案--------------------
你是说,你的重写规则是每一个条件一条重写而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 ....

   参数这样就可以随心控制。