Tuesday, February 10, 2009

正则表达式问题Collection

求助正则表达式,请进。
我有一站用虚拟主机htaccess进行rewirte,   代码如下:
Options
RewriteEngine   on
RewriteRule   ^([a-z]+).html$   /$1.php
RewriteRule   ^([0-9]+),([a-z]+).html$   /$2.php?id=$1
RewriteRule   ^([0-9]+)-1.html$   /productdetail.php?chanpinid=$1
RewriteRule   ^([0-9]+)-2.html$   /news.php?newsid=$1
RewriteRule   ^([a-z]+)([0-9]+).html$   /$1.php?page=$2
RewriteRule   ^([0-9]+),([0-9]+),([0-9]+).html$   /moreproduct.php?classid=$1&boardid=$2&page=$3
RewriteRule   ^([0-9]+),([0-9]+).html$   /productmore.php?productid=$1&page=$2
以上规则我的目的作用域是网站的根目录。
按以上规则URL重写后,IE中输入http://www.###.com/118-1.html,   URL实际返回http://www.###.com/productdetail.php?chanpinid=118
现在的问题是:网站根目录下有一文件夹abc,   当我在IE中输入http://www.###.com/abc/118-1.html   REWRITE规则同样奏效,URL实际返回也是http://www.###.com /productdetail.php?chanpinid=118
由于这个规则的缺陷,http://www.###.com/118-1.html和http://www.###.com/abc/118-1.html   其实指向同一个URL,   但GOOGLE现在重复收录我网站的内容,导致大量的网页复制。
如果我屏蔽http://www.###.com/abc/118-1.html   指向   http://www.###.com/productdetail.php?chanpinid=118,
我在正则表达式规则中要做何修改?

用RewriteCond限制重写的条件。

---------------------------------------------------------------------------------

网站改版后的URL地址跳转
No Comments | 578 views绝大多数网站改版后都会面对一个令人很苦恼的问题,就是怎么让原来的地址可以正常访问,且和新改版后的网站能有机的结合在一起。
对于这个问题,比较好的解决办法是通过.htaccess文件的重定向来解决,而很多人不知道怎么来写.htaccess文件,尤其是里面的正则表达式,这里我仅简单说一下怎样通过.htaccess来实现旧地址到新地址的跳转,其他更深入的知识,以及正则表达式的知识,我会在以后的博文中讲解。
通过.htaccess调整我这里有两种方法:第一种是通过redirect来实现,代码是
Redirect 原地址 新地址
例如我在rssdiy上面的写法是
Redirect /show-1.html http://www.rssdiy.net/channel/1/
这和域名里面的url调整是一个效果的。第二种是通过RewriteRule来实现的,代码是
RewriteRule 原url规则 新url规则
注意这里是规则,可以用正则表达式。例如上面的地址也可以这样写
RewriteRule ^show-([0-9]+)\.html$ channel/$1/ [R]

--------------------------------------------------------------------------------

采用正则表达式规范文件名

在过去的两年中,本Blog的文件名一直很随意,有些包含下划线,有些包含连字符。

这次趁系统升级的机会,把所有的url都统一为以连字符号(-)来构成,url的文件名中不再包含下划线了。

那么原先那些包含下划线的网址,已经被搜索引擎收录了,而且也有Google PR值了,总不能白白放弃。这时想到了网址重定向。

于是,在.htaccess中添加了数条规则,把网址以301重定向到相对应的新网址。
也就是把
http://seo.g2soft.net/2008/02/25/google_adsense_tos_update.html
永久重定向到
http://seo.g2soft.net/2008/02/25/google-adsense-tos-update.html

因为原先网址的随意性,所以需要用到正则表达式和Rewrite规则来做到我的要求。这里就不做展开,只举一个例子好了。

RewriteRule ^([^_]*)_(.*)\.html$ http://seo.g2soft.net/$1-$2.html [R=301,L]

关于下划线还是连字符号好,在搜索引擎优化领域有过争执,通常认为连字符号为好。可是在Google的搜索结果中,第一页也常常看到包含下划线的网址。所以我认为,这两者之间的差距已经很小,对于搜索排名的影响也很小了。

--------------------------------------------------------------------------------

说道URL的写法有很多,有用数字的,有用很多参数的,都有。
而促使DavidYin在八月份把网址通过URL rewrite来规范为连字符号连接英文单词的方式是因为Google明确说明对于Google友好的网址就是这种格式。

这里我把认为重要的有关网址格式的要点说明如下:

1)使用有含义的单词,而不是数字来编写url。
2)在网址中使用标点比不用标点好,比如green-tea.html就比greentea.html好。
3)使用连字符号就是-来连接单词,而要尽量避免使用下划线。

这就是我对于网址格式的最好建议,也就是本站目前在使用的格式。因为本站是Blog,是以日期为线索的,所以日期也成为网址的一部分。对于其它类型的网站,则不必考虑日期。

--------------------------------------------------------------------------------

No comments: