Posts Tagged ‘urlrewriting’

nginx 301重定向

December 17, 2007 Tags: , , ,

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种方法。

无缝迁移blog

June 23, 2007 Tags: , , ,

我使用的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给保留转移到新的地址上来。