松鼠Mike的树洞 -- Make Each Day Count
  • 排序
  • 选择时间

网站301重定向

发布日期: 2014-07-24更新日期:2015-08-23

如果有两个以上的域名同时指向一个网站内容,可以同时通过两个域名来访问。比如假设有一个网站的管理员同时申请了example1.com和example2.com,那么一般来说设置正确的话能通过http://www.example1.com和http://www.example2.com来访问到同一内容的网站。但是对于搜索引擎来说这样就把一个记录变成了两个,从搜索效果来说这样分散了搜索的结果。301重定向可以解决这个问题,将example2.com重定向到example1.com后就可以将对http://www.example2.com的访问全部指向http://www.example1.com,从而在搜索引擎处集中搜索结果。 对于基于Apache2的网站,通过启用mod-rewrite可以通过编写.htaccess来实现重定向。

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !example1.com$ [NC]
RewriteRule ^(.*)$ http://www.example1.com/$1 [L,R=301]

RewriteCond %{HTTPS} Off [NC]
RewriteCond %{HTTP_USER_AGENT} !(baiduspider|soso|bing|sogou|yahoo|sohu-search|yodao|robozilla|msnbot|msie|feedburner) [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NC,L]

NC表示不区分大小写,L表示RewriteRule到这一条命令有效,R=301表示301重定向,^(.*)$表示URL中域名以后的所有字符串。 第3,4行将不是example1.com的域名请求全部重新定向到example1.com上。 第7行判断被请求的URL是不是https,第8行判断URL请求来源的客户端,第9行将所有非https的链接请求全部重定向为https(强制访问https)。 第8行是因为根据https://wzyboy.im/post/799.html
  1. 目前搜索引擎中似乎只有 Google 能抓取 https:// 站点,而其他的搜索引擎都不抓取。
  2. 破烂 IE 是不支持 SNI 的(XP + IE8 及以下),因此对于这些用户来说,显示的依然是“证书错误”(其实是没有错误,是 IE 自己有错误)。
对于用Wordpress搭建的网站还有一个小细节需要注意,我在这上面折腾了两个小时... 通常Wordpress自己会创建.htaccess文件,并且写入下述重定向命令
# BEGIN WordPress

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


# END WordPress
这是为了将默认example.com/id=x的链接改为example.com/customized_link这种对于人类来说更加容易理解和记忆的格式。我们自己做重定向的时候,如果想要实现http://www.example2.com/aaa向http://www.example1.com/aaa的重定向或者强制访问https的重定向就一定要将自己的重定向代码放在上述Wordpress生成重定向代码的上面,否则只能执行http://www.example2.com向http://www.example1.com的重定向。 另外,自定义重定向代码要放在Wordpress自动生成的代码段以外,否则会被覆盖而丢失。