http://www.shareb2c.com/b2c-artical-27
早就想将我们的网站实现静态化,但是由于涉及到整体网站的修改,工作量巨大,需要较长时间,一直拖到现在。趁着我们进入淡季,终于把这件事完成了。
静态化对于SEO的意义在于,搜索引擎对链接中的问号,“&”号等比较感冒,因此不利于搜索引擎对这些网页的收录,而且也会不计入内链数
量。据说google等正在改进对动态链接的支持,我没有考证过。不过考虑到毕竟不止有google一个搜索引擎,静态化的工作还是必须的。
静态化当然还有客户界面更友好等优点,此处就不多详述了。
实现静态化有很多技术,比如套模板的方法,但是后期维护工作将十分麻烦。
最终,我还是选择了方便的伪静态化技术,即URL rewrite(URL重写)。毕竟,我的目的只是seo。所谓伪静态化,就是访问者和搜索引擎看不到问号和和号等了,但实际上页面还是动态的。
经比较试验,选用了UrlRewriting.Net(我的网站基于.Net的 www.shirtonline.cn)。下载地址: http://www.urlrewriting.net/155/de/downloads.html
使用起来也很方便,只要把dll文件放入bin目录,然后在web.config中做好相应配置即可。主要是这几段:
在<configuration>节点内加入
<!-- for url rewritingnet-->
<configSections>
<section name="urlrewritingnet"
requirePermission ="false"
type="UrlRewritingNet.Configuration.UrlRewriteSection,
UrlRewritingNet.UrlRewriter" />
</configSections>
<!-- end for url rewritingnet-->
在<system.web>节点内加入
<!-- for url rewritingnet-->
<httpModules>
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</httpModules>
<!-- end for url rewritingnet-->
还是在<configuration>节点内加入(放在前面的configsections之后)
<!-- for url rewritingnet-->
<urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" defaultPage = "index.aspx" defaultProvider="RegEx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07" >
<rewrites>
<add name="RewriteRule1"
virtualUrl="^~/(/d+).aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Default.aspx?ID=$1"
ignoreCase="true" />
<add name=" RewriteRule2"
virtualUrl="^~/website /(.*)/default.aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/website /default.aspx?id=$1"
ignoreCase="true" />
</rewrites>
</urlrewritingnet>
<!--end for url rewritingnet-->
上面每个 <add>都是一个重写规则,你可以根据自己的要求增加规则。
你可以实现四种重写
1、扩展名不变,如
<add name="RewriteRule1"
virtualUrl="^~/(/d+).aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Default.aspx?ID=$1"
ignoreCase="true" />
重写的结果是,把 类如 default.aspx?id=123456 的链接转换成 123456.aspx
<add name=" RewriteRule2"
virtualUrl="^~/website /(.*)/default.aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/website /default.aspx?id=$1"
ignoreCase="true" />
重写的结果是,把 类如 website/default.aspx?id=123456 的链接转换成 website/123456/default.aspx
这类重写在IIS上不必有其他设置,默认设置即可。有的虚拟主机可能需要被服务商修改过,则需进行如下设置:
网站管理->属性->目录->配置(G
)...->映射->应用程序扩展->扩展名 .aspx ->编辑->"确认文件是否存在"复选框不选
2、把aspx重写成html
<add name="RewriteRule3"
virtualUrl="^~/(/d+).html"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Default.aspx?ID=$1"
ignoreCase="true" />
重写的结果是,把 类如 default.aspx?id=123456 的链接转换成 123456.html
需要在IIS配置如下:
网站->属性->目录->配置(G
)...->映射->应用程序扩展->添加
可执行文件:c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll
扩展名:.html
动作:限制为 GET,HEAD,POST,DEBUG
脚本引擎:选中
确认文件是否存在:不选
3、任意扩展名重写
<add name="RewriteRule4"
virtualUrl="^~/(/d+).myname"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Default.aspx?ID=$1"
ignoreCase="true" />
重写的结果是,把 类如 default.aspx?id=123456 的链接转换成 123456.myname
IIS配置和重写成html一样。
4、重写成路径
<add name="RewriteRule5"
virtualUrl="^~ /(.+) "
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/Default.aspx?ID=$1"
ignoreCase="true" />
重写的结果是,把 类如 default.aspx?id=123456 的链接转换成 /123456
IIS配置:网站->属性->目录->配置(G
)...->映射->通配符应用程序映射->插入
可执行文件:c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll
确认文件是否存在:不选
如图:
注释: 在IIS7
下面,重写成路径,即无扩展名的重写设置如下 (参考 http://www.improve.dk/blog/2006/12/11/making-url-rewriting-on-iis7-work-like-iis6
)
1、 进入iis7管理界面的 “处理程序映射”,找到 StaticFile ,进入编辑,将* 改为 *.* ,将 “请求限制”中的 “文件或文件加” 改选为 “文件”
2、点击右侧 “添加脚本映射”,请求路径为 * , 可执行文件填入
%windir%/Microsoft.NET/Framework/v2.0.50727/aspnet_isapi.dll
,“请求限制”中,去除 “仅当请求映射至.....”选项,自己取名字,如"all" 。确定保存
3、点击右侧“查看经过排序的列表”,将刚才添加的 "all" 下移至 StaticFile 下面
以上三步即可
另:在iis7中,必须使用 “经典应用程序池” 才可以实现url的重写。
如果有多个参数,请参考如下例子,
<add name=" RewriteRule6"
virtualUrl="^~/website/(.*)/(.*)/(.*)/default.aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/website/default.aspx?id1=$1&id2=$2&id3=$3"
ignoreCase="true" />
上面 (.*)/(.*)/(.*) 的顺序为依次 id1, id2, id3
重写的结果是,把 类如 website/default.aspx?id1=12&id2=34&id3=56 的链接转换成 website/12/34/56/default.aspx
以上规则涉及到正则表达式
写法。请搜索参考正则表达式教程。
本人网站对关键页面都实现了重写,对用户帐户网页,则没有重写,省去部分工作量,呵呵。
另外,重写会占用服务器资源,尤其是该写成纯路径形式(上诉第4类重写),会对每个图片都进行重定向,网上有解决方案。本人没有试验,读者可去搜索一下。
如果仅出于seo目的,那么,不必非把aspx改写成html,因为目前各主要搜索引擎对aspx和html的支持度是一样的。把问号,&号等去掉就可以了。但最好改写成纯路径方式,因为对搜索引擎来说,路径的权重高于文件的权重。
欢迎交流。