URLREWRITE.0

首先赞下学长,虽然是半路出家但爱折腾的个性让我为了接手他的工作学到了好多东西,推荐及引导我自学的是技术也都是是些很有用处的技术。虽然在我呆那三个月不到时间后就回老家结婚了,但这3个月实在的了解到和学到了不少。那么不多说其他的,begin:

 
那是一个悲催的网站,从我接手到现在换了4台服务器,服务器软件也从SERVER2008, NGINX, APACHE到现在的SERVER2003,完全变成我增长经验值的工具。虽然除了格式外基本大同小异,但些微造成的不同造成自己在搜索引擎里苦苦搜寻自己想要的资料也是很痛苦。接手时SERVER2008里的重写是XML的格式
<rule name="已导入的规则 5">
                    <match url="^member/(index|credit)-(\d+)$" ignoreCase="false" />
                    <action type="Rewrite" url="/index.php?action={R:1}&amp;mod=member&amp;nowpage={R:2}" appendQueryString="false" />
                </rule>

 

除了头部略有区别外,其他三个下的基本写法倒是都一样,学习下基本语法进行改写并不困难,这部分也没什么好讲的
 
RewriteRule ^member/(index|credit)-(\d+)$ /index.php?action=$1&mod=member&nowpage=$2 [L]
 
可惜不能就此简单的结束,作为一个悲催的分类信息网站,首先就因为他是一个半成品,仅仅在地址简单的页面完成了重写,涉及到大量分类选择的时候就完全靠querystring完成了。为了实现全站静态化的需求,于是就得实现两个功能:对原来的地址重写函数进行重写和地址重定向的重写。第一个并不是个困难的任务,根据数据库进行重写的格式的设计然后实现并无太多技术可言,这里不加说明了。但对于刚接触的我来说第二条确实个极大的挑战。
 
简单粗暴永远是解决问题最快速的方法,对于刚接触对这块理解不太深的我参照官方文档
对/test/145/b169_1d171_2f174_4a168_1
进行了类似如下的重写
RewriteRule ^([a-z]+)/(\d+)/([a-z])(\d+)_(\d+)?$ /index.php?
action=category&mod=info&category=$1&district=$2&itemno=$3&itemcat=$4&sel=$5 [QSA]
在仅选择一个分类情况就已经用了5次子表达式了,明显是完成不了需求的,于是查找手册寻找循环解决的
RewriteCond %{REQUEST_URI} [a-z]\d+_\d+
RewriteRule ^(.+)([a-z])(\d+_\d+)$ $1?$2=$3 [QSA,R]
结果发现死循环了...经过不断的尝试,发现根本不必循环,仅仅写成这样就行了
RewriteCond %{REQUEST_URI} [a-z]\d+_\d+
RewriteRule ^(.+)([a-z])(\d+_\d+)$ $1?$2=$3 [QSA]
问题到此解决。附带一提,SERVER2003下ISAPI_Rewrite不支持,尝试各种方法均无解,无奈换成ISAPI_Rewrite3来解决。
end
 
下篇还是URLREWRITE,自己将尽量尝试各种功能,以期达到系统的学习和深入。
posted @ 2013-03-17 18:37  namedgreen  阅读(168)  评论(0)    收藏  举报