ISAPI_Rewrite方式的日志别名伪静态实现
ISAPI_Rewrite方式的日志别名伪静态实现

ISAPI_Rewrite方式的日志别名伪静态实现

  伪静态的好处这里不废话了,但就url的整洁程度而言,就比后面又是问好又是连接符又是等于号的那种乱七八糟的动态地址看着舒服许多。
  用bo-blog2.1.1重新建博之后发现,单纯的/post/xx/可以通过ISAPI_Rewrite方式实现,但是日志有了别名的话就不行了。于是就开始研究bo-blog的httpd.ini里面的Rewrite规则,看来看去没有发现什么问题(水准有限@@)

  于是跑去官方论坛找答案,结果发现还有一个url.php与伪静态有关,难怪别名日志的形式跟列表页面给出的url不一致了。原因是正则表达式中,如果别名日志前面去掉alias/部分的话会跟其他表达式冲突。也就是说,不能实现“域名/别名/”这种形式的伪静态,只能实现“域名/任意目录名/别名/”的伪静态。

  但是默认的alias好奇怪,本来就要用唯一链接,也就是说有了别名之后,日志默认的“post/xx/”这种形式就不希望再被访问了,此处干吗还要叫做 alias(别名)呢?干脆,改成post。如此一来,无论日志是否有别名,其URL形式都是“域名/post/”开头的,后面要么是数字ID、要么是别名。这样就统一了,看着也舒服许多。

  记录修改方式如下:
一、修改inc/url.php文件。2.1.1此处默认的是根下的别名,有冲突。else $outurl=($alias) ? "{$alias}/" : "post/{$id}/";修改为:else $outurl=($alias) ? "post/{$alias}/" : "post/{$id}/";
二、修改httpd.ini,将#Customized URL部分改成RewriteRule ^(.*)/post/([^/]*)\_?([0-9]+)?\_?([0-9]+)?/?$ $1/read\.php\?blogalias=$2&page=$3&part=$4 [I]

  重启IIS。OK了。^o^ 伪静态搞定之后,就可以开始整唯一链接部分了。

最后,提供我的httpd.ini完整代码,需要的朋友可以参考。[ISAPI_Rewrite]
CacheClockRate 3600
RepeatLimit 32

RewriteRule ^(.*)/post/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ $1/read\.php\?entryid=$2&page=$3&part=$4 [I]
RewriteRule ^(.*)/page/([0-9]+)/([0-9]+)/?$ $1/index\.php\?mode=$2&page=$3 [I]
RewriteRule ^(.*)/starred/([0-9]+)/?([0-9]+)?/?$ $1/star\.php\?mode=$2&page=$3 [I]
RewriteRule ^(.*)/category/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ $1/index\.php\?go=category_$2&mode=$3&page=$4 [I]
RewriteRule ^(.*)/archiver/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ $1/index\.php\?go=archive&cm=$2&cy=$3&mode=$4&page=$5 [I]
RewriteRule ^(.*)/date/([0-9]+)/([0-9]+)/([0-9]+)/?([0-9]+)?/?([0-9]+)?/?$ $1/index\.php\?go=showday_$2-$3-$4&mode=$5&page=$6 [I]
RewriteRule ^(.*)/user/([0-9]+)/?$ $1/view\.php\?go=user_$2 [I]
RewriteRule ^(.*)/tags/([^/]+)/?([0-9]+)?/?([0-9]+)?/?$ $1/tag\.php\?tag=$2&mode=$3&page=$4 [I]
RewriteRule ^(.*)/component/id/([0-9]+)/?$ $1/page\.php\?pageid=$2 [I]
RewriteRule ^(.*)/component/([^/]+)/?$ $1/page\.php\?pagealias=$2 [I]

#Force redirection for old rules
RewriteRule ^(.*)/post/([0-9]+)\.htm$ $1/post/$2/ [R]
RewriteRule ^(.*)/post/([0-9]+)\_([0-9]+)\.htm$ $1/post/$2/$3/ [R]
RewriteRule ^(.*)/post/([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ $1/post/$2/$3/$4/ [R]
RewriteRule ^(.*)/index\_([0-9]+)\_([0-9]+)\.htm$ $1/page/$2/$3/ [R]
RewriteRule ^(.*)/star\_([0-9]+)\_([0-9]+)\.htm$ $1/starred/$2/$3/ [R]
RewriteRule ^(.*)/category\_([0-9]+)\.htm$ $1/category/$2/ [R]
RewriteRule ^(.*)/category\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ $1/category/$2/$3/$4/ [R]
RewriteRule ^(.*)/archive\_([0-9]+)\_([0-9]+)\.htm$ $1/archiver/$2/$3/ [R]
RewriteRule ^(.*)/archive\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ $1/archiver/$2/$3/$4/$5/ [R]
RewriteRule ^(.*)/showday\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ $1/date/$2/$3/$4/ [R]
RewriteRule ^(.*)/showday\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\_([0-9]+)\.htm$ $1/date/$2/$3/$4/$5/$6/ [R]

#Customized URL
RewriteRule ^(.*)/post/([^/]*)\_?([0-9]+)?\_?([0-9]+)?/?$ $1/read\.php\?blogalias=$2&page=$3&part=$4 [I]