Nginx使用HTTP 301将旧域重定向(重写)到新域
我有将域名从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的临时重定向。
这意味着页面已临时移动到新位置。
不建议将此代码用于域更改。