Nginx绑定域名并配置www域名301转向

比如说我们有域名example.com,然后配置我们的Nginx服务器,希望绑定两个域名不带www的example.com以及www.example.com。绑定域名可以在你的Nginx配置文件的server {}节做下述配置。

  server {
    listen 80;
    server_name example.com www.example.com;
  }

这样配置后example.com和www.example.com都指向我们的服务器了,虽然这样没有什么,但是这对于搜索引擎是不友好的,不利于网站的SEO,所以我们需要利用301重定向一个域名到另一个域名上。

在Nginx的server节中引入$host变量,这个指代当前访客访问主机时使用的主机名(域名)。接下来我们可以利用if条件语句配合rewrite permanent方式做301定向了。

  # 示例1: 将example.com定向到www.example.com
  server {
    listen 80;
    server_name example.com www.example.com;
    if ($host != 'www.example.com') {
      rewrite ^/(.*)$ http://www.example.com/$1 permanent;
    }
  }

  # 示例2: 将www.example.com定向到example.com
  server {
    listen 80;
    server_name example.com www.example.com;
    if ($host != 'example.com') {
      rewrite ^/(.*)$ http://example.com/$1 permanent;
    }
  }

上面举了两个例子分别判断当前的请求主机域是否符合我们的要求,不符合则截取请求路径/后面的内容并附加到我们期望的url后面,同时作301永久定向(permanent)。当然这里我们使用的是不等于!=来进行判断的,如果使用等于的话就直接使用等于号(=)进行判断并将条件更改为我们不期望的主机域就可以了。

这里有几个问题需要注意一下:

1. 上述配置文件的if语句与括号必须以一个空格隔开,否则Nginx会报nginx: [emerg] unknown directive “if($host” in…错误。

2. Nginx的条件判断不等于是!=,等于是=,注意这里的等于只有一个等于号,如果写成==,则Nginx会报nginx: [emerg] unexpected “==” in condition in…错误。

3. 301永久转向配置成功后,浏览器可能会有记忆效应,比如说IE。所以一旦配置并利用浏览器访问过页面,那么你更改了301转向配置后,这个页面可能依旧是上次的转向,建议清除浏览器缓存,或者尝试访问其他页面,也可以在url的?问号后面加上一些随机的参数,避免浏览器的缓存记忆效应。

配置完成后,可以使用nginx -s reload命令进行平滑的更新配置(不重启Nginx)。

本文转自
王晔的流水账
http://wangye.org/blog/archives/325/

2 comments on “Nginx绑定域名并配置www域名301转向

  1. Firm 05/24/2013 11:57

    看来还是win的iis添加会简单些

  2. 海天 06/03/2013 08:08

    换域名,换主题了,不错,很清新!

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Captcha Code