December 17, 2007 Tags: caipanzi, nginx, urlrewriting, 菜盘子
nginx中进行301重定向(301 redirect)是非常容易的。比方说要将www.caipanzi.com永久性重定向至caipanzi.com,有两种方法:
1.方法A
server {
server_name caipanzi.com www.caipanzi.com;
if ($host != 'caipanzi.com' ) {
rewrite ^/(.*)$ http://caipanzi.com/$1 permanent;
proxy_set_header Host "caipanzi.com";
}
...
}
2.方法B(为带www的域名单独设一条server规则)
server {
server_name www.caipanzi.com;
rewrite ^(.*) http://caipanzi.com$1 permanent;
}
菜盘子目前用的是第2种方法。
June 23, 2007 Tags: asp.net, pagerank, seo, urlrewriting
我使用的Blog系统是Subtext 1.9.5,原作为一个单独的Application(ashchan.com/blog)“嵌”在网站ashchan.com下面。这样配置有时候会出问题,比如我往ashchan.com上添加一个HttpModule的时候,有可能会造成ashchan.com/blog的出错。
同时,网站使用免费的ISAPI filter modrewrite (该产品网站目前我这里无法访问,原因未知)来处理URL重写(URL Rewriting),曾经测试过,在高并发访问时,该filter可能会出错造成应用程序池死掉。
因此对配置进行了更改,将blog从ashchan.com下迁出建成一个单独的站点(blog.ashchan.com),并将原来使用的modrewrite ISAPI filter去除,改为使用UrlRewritingNet.UrlRewrite。我个人使用,觉得这两个产品的优缺点分别如下:
| |
moerewrite |
UrlRewritingNet |
| 费用 |
免费 |
免费 |
| 发行方式 |
开源,Delphi,需自己编译,不提供Binary |
开源,C#,同时提供源码和Binary |
| 配置 |
需修改IIS站点配置,加入ISAPI filter |
以DLL方式置于网站bin目录下,如果需对非aspx页面进行重写,则需在IIS站点配置下对特定扩展名进行映射 |
| 性能 |
性能高,但测试中出现高并发访问下出错的情况(未查明原因,可能是配置或使用的问题) |
性能较高,稳定 |
| 对无扩展名URL的支持 |
支持 |
部分支持(使用该特性,需将所有扩展名的URL均映射至ASP.NET引擎) |
| 规则编写 |
以类似Apache modrewrite的正则语法、使用ini文本文件编写 |
以易读的语法在Web.config中编写 |
| 跨站转发 |
未测试,应该支持 |
支持 |
ashchan.com使用的URL,大部分可以直接使用UrlRewritingNet来实现重写,这些URL以.aspx或.html为扩展名,其中以.html为扩展名的需在IIS中设置以ASP.NET来处理。
另外一些无扩展名的URL,如http://ashchan.com/tag/photo,则无法使用,因为我不想让ASP.NET 引擎来处理所有文件的请求。
这就要用到其他的方案来协同了。方案很简单,自定义404错误,然后在处理404错误的aspx页面分析url,发现是上面类型的无扩展名的url则转至相关页面。
最后还剩下blog的url未处理。原来的形如www.ashchan.com/blog/archive/2007/03/16/refresh.aspx的页面,需要转向至blog.ashchan.com/archive/2007/03/16/refresh.aspx,而且最好是301跳转,这样对搜索引擎比较友好。这也好办,使用如下规则即可:
<add name="blog_2" virtualUrl="^http\://www.ashchan.com/blog/(.*).aspx"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="http://blog.ashchan.com/$1.aspx"
redirect="Domain"
redirectMode="Permanent"
ignoreCase="true" />
大功搞掂!但愿301跳转能把PR给保留转移到新的地址上来。