当前位置:主页 > 汉朝名人 > 正文

科技常识:Nginx服务器中HTTP301跳转到带www的域名的方法

07-24 汉朝名人

今天小编跟大家讲解下有关科技常识:Nginx服务器中HTTP301跳转到带www的域名的方法,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关科技常识:Nginx服务器中HTTP301跳转到带www的域名的方法的相关资料,希望小伙伴会喜欢也能够帮助大家。

从nginx的官方文档documentation,正确的nginxhttps301跳转到带www域名方法的方法如下:

HTTP301跳转到带www域名方法

复制代码代码如下:server{listen80;server_nameexample.org;return301http://www.example.org$request_uri;}

server{listen80;server_namewww.example.org;...}

HTTPS301跳转到带www域名方法

复制代码代码如下:server{listen80;server_namewww.domain.com;//$schemewillgetthehttpprotocol//and301isbestpracticefortablet,phone,desktopandseoreturn301$scheme://domain.com$request_uri;}server{listen80;server_namedomain.com;//heregoestherestofyourconfigfile//examplelocation/{rewrite^/cp/login?$/cp/login.phplast;//etcetc...}}

要先用nginx-v命令检查你所说使用的nginx的版本.下面是对于旧版本的nginx301跳转到带www域名方法从www.ksharpdabu.info跳转到ksharpdabu.info

复制代码代码如下:server{server_namewww.domain.com;rewrite^(.*)http://domain.com$1permanent;}

server{server_namedomain.com;#Therestofyourconfigurationgoeshere#}

所以需要两个server段。

从ksharpdabu.info跳转到www.ksharpdabu.info

复制代码代码如下:server{server_namedomain.com;rewrite^(.*)http://www.domain.com$1permanent;}

server{server_namewww.domain.com;#Therestofyourconfigurationgoeshere#}

按上面设置后,用rewrite的方法跳转到指定的域名下,利于SEO下面是我举例,从www.google.com跳转到google.com的部分nginx配置内容:

复制代码代码如下:server{server_namewww.google.com;rewrite^(.*)http://google.com$1permanent;}server{listen80;server_namegoogle.com;indexindex.phpindex.html;#####nowpullthesitefromonedirectory#root/var/www/www.google.com/web;#done#location=/favicon.ico{log_not_foundoff;access_logoff;}}

网上还有一种不用rewirte的方法,如下:

复制代码代码如下:server{#listen80isdefaultserver_namewww.example.com;return301$scheme://example.com$request_uri;}

server{#listen80isdefaultserver_nameexample.com;##heregoestherestofyourconf...}

因为return可以用于所有的版本,而rewrite可能因为版本的不同,导致301出错。而且可以直接停止执行匹配和搜索。

下面包含了http和https的。同一个服务器。

复制代码代码如下:server{listen80;listen443ssl;server_namewww.example.com;return301$scheme://example.com$request_uri;}

server{listen80;listen443ssl;server_nameexample.com;#restgoeshere...}

$scheme变量只会包含http如果你的服务器只监听80端口(默认是80端口)同时监听的选项中不含ssl关键字.不适用这个变量,就不能获得你所想的要的跳转结果。

将所有http强制跳到https,SSL(personalconfigonUNIXwithIPv4,IPv6,SPDY,...):复制代码代码如下:##Redirectallwwwtonon-www#server{server_namewww.example.com;ssl_certificatessl/example.com/crt;ssl_certificate_keyssl/example.com/key;listen*:80;listen*:443sslspdy;listen[::]:80ipv6only=on;listen[::]:443sslspdyipv6only=on;

return301https://example.com$request_uri;}

##Redirectallnon-encryptedtoencrypted#server{server_nameexample.com;listen*:80;listen[::]:80;

return301https://example.com$request_uri;}

##Therewego!#server{server_nameexample.com;ssl_certificatessl/example.com/crt;ssl_certificate_keyssl/example.com/key;listen*:443sslspdy;listen[::]:443sslspdy;

#restgoeshere...}##Redirectallwwwtonon-www#server{server_namewww.example.com;ssl_certificatessl/example.com/crt;ssl_certificate_keyssl/example.com/key;listen*:80;listen*:443sslspdy;listen[::]:80ipv6only=on;listen[::]:443sslspdyipv6only=on;return301https://example.com$request_uri;}##Redirectallnon-encryptedtoencrypted#server{server_nameexample.com;listen*:80;listen[::]:80;return301https://example.com$request_uri;}##Therewego!#server{server_nameexample.com;ssl_certificatessl/example.com/crt;ssl_certificate_keyssl/example.com/key;listen*:443sslspdy;listen[::]:443sslspdy;#restgoeshere...}