Nginx使用HTTP 301将旧域重定向(重写)到新域

时间:2020-01-09 10:45:58  来源:igfitidea点击:

我有将域名从long-domain-name-example.com更改为example.com,该域名更短且易于记忆。
如何在运行于Unix之类的nginx Web服务器下,使用HTTP/1.1 301已永久移动状态代码将旧域重定向到新域?

Nginx Web服务器带有名为HttpRewriteModule的模块。使用此模块可以使用正则表达式(PCRE)更改URI,并根据变量重定向和选择配置。您要做的就是捕获旧域并重定向到新域。编辑/usr/local/nginx/conf/nginx.conf或者/etc/nginx/nginx.conf,运行:

# vi /usr/local/nginx/conf/nginx.conf

声明server_name之后,将以下行添加到server {...}块中:

rewrite ^ $scheme://www.example.com permanent;

在这种情况下,所有对uri的请求,例如long-domain-name-example.com,long-domain-name-example.com/file.html,long-domain-name-example.com/folder/file2.php, long-domain-name-example.com/cgi-bin/register.cgi?action=1均使用代码301重定向到www.example.com。
但是,您可能也想复制并传递URL,请尝试:

rewrite ^ $scheme://www.example.com$request_uri permanent;

$request_uri变量等于从客户端收到的包含args的原始请求URI。
换句话说,使用301状态代码重定向网址如下:

http://long-domain-name-example.com to http://www.example.com
http://long-domain-name-example.com/file.html to http://www.example.com/file.html
http://long-domain-name-example.com/cgi-bin/register.cgi?action=1 to http://www.example.com/cgi-bin/register.cgi?action=1
http://long-domain-name-example.com/static/js/lib.js?v=2 to http://www.example.com/static/js/lib.js?v=2

示例代码块:

### redirect beta.theitroad.local$URI to www.theitroad.local$URI with 301 ###
  server {
    listen      75.126.153.206:80;
    server_name beta.theitroad.local;
    root        /usr/local/nginx/html;
    index       index.html;
    rewrite     ^ $scheme://www.theitroad.local$request_uri permanent;
    # .... 
}

保存并关闭文件。
重新加载Nginx Web服务器,运行:

# /usr/local/nginx/sbin/nginx -s reload

重定向与永久标志

"永久"标志重定向带有http状态代码301的URL。
这意味着页面已永久移动到新位置。
此代码是搜索引擎巨头Google推荐的:

301重定向在以下情况下特别有用:

  • 您已将网站移至新域,并且希望使过渡尽可能无缝。
  • 人们通过几个不同的URL访问您的网站。例如,如果可以通过多种方式访问您的主页,例如http://example.com/home、http://home.example.com或者http://www.example.com,那么建议您选择其中一个网址作为您的首选(规范)目标,并使用301重定向将流量从其他网址发送到您的首选网址。您还可以使用网站站长工具来设置您的首选域。
  • 您要合并两个网站,并希望确保将指向过期URL的链接重定向到正确的页面。

" redirect"标志返回带有http状态代码302的临时重定向。
这意味着页面已临时移动到新位置。
不建议将此代码用于域更改。