nginx 301的正确实现方式

已有 3450人阅读此文 - - 服务器配置

       由于之前使用使用其它域名,现在使用新的域名,为了使百度收录不受影响,也为了方便好记,所以需要把原域名的请求全部导入到新域名中。由于现在域名注册商也不提供域名转发了,所以使用301域名重写向,在nginx中配置是很方便的,但是开始不会,在网上查了一些内容,由于那些作者都未标明是哪个版本里适用的,导致配置完成后网站不能正常打开,提示过多的重定向。

尝试打开www.zicheng.net时,发生太多的重定向。如果你打开一个被重定向为打开另一个页面的页面,并且第二个页面被重定向为打开初始页面,那么就有可能发生上述情况

要说最靠谱的还是官方的文档,由于是英文的,简单的翻译一下,供后来者少走弯路。


首先我的nginx版本是1.4.3,不算新的。


正文:

  人们需要使用多个域名共享一个站点时,一般是配置apache的.htaccess,apache的配置规则如下:

RewriteCond  %{HTTP_HOST}  example.org
RewriteRule  (.*)          http://www.example.org$1

在nginx中会这样使用:

server {
    listen       80;
    server_name  www.example.org  example.org;
    if ($http_host = example.org) {
        rewrite  (.*)  http://www.example.org$1;
    }
    ...
}

很遗憾这是一种错误的,麻烦,和无效方式。正确的方法是定义一个单独的服务器,比如zicheng.net:

server {
    listen       80;
    server_name  xusir.net www.xusir.net;
    return       301 http://www.zicheng.net$request_uri;
}

server {
    listen       80;
    server_name  www.zicheng.net;
    ...
}

另外在 0.9.1之前的版本,可以直接这样写:

rewrite      ^ http://www.zicheng.net$request_uri?;


现在可以使用我上面提供的域名进行测试,无论访问哪个目录,都会重定向到www.zicheng.net的域名下。

来源:自成e家 出处:nginx 301的正确实现方式
本文由 自成e家 原创 ,转载请注明出处,你的支持是我继续写作、分享的最大动力!
期待你一针见血的评论,Come on!