今天把网站域名更为二级域名,准备把原来伪静态的页面301重定向到新的域名。
之前使用ISAPI_Rewrite 1.3做的伪静态:
[ISAPI_Rewrite]
CacheClockRate 3600
RepeatLimit 32
RewriteRule ^/([\d]+).html\?(.*) /view.php\?id=$1
在httpd.ini里新增重定向规则:
RewriteCond Host: ^xiaohuawanpian\.com$
RewriteRule (.*) http\://android\.xiaohuawanpian\.com$1 [I,R]
为了保险起见,还是重启下IIS,用站长工具的HTTP状态查询发现:返回的http状态码是302而不是预期的301。后来查询下ISAPI_Rewrite帮助文档,ISAPI_Rewrite 1.*的只能做302重定向,做不到301重定向,果断升级到ISAPI_Rewrite 3。
升级到ISAPI_Rewrite 3后,把httpd.ini改名为httpd.conf,并修改重定向规则,因为和1.*的写法有些不一样:
RewriteCond %{HTTP:Host} ^xiaohuawanpian\.com$
RewriteRule (.*) http\://android\.xiaohuawanpian\.com$1 [NC,R=301]
RewriteCond Host: ^android\.xiaohuawanpian\.com$
RewriteRule ^/([\d]+).html\?(.*) /view.php\?id=$1
再次测试发现,这种做法http的返回码是301了,但Location和预期的不一样:
如http://xiaohuawanpian.com/100.html
返回的是:
Location:http://android.xiaohuawanpian.com/view.php?id=100
而不是预期的:
Location:http://android.xiaohuawanpian.com/100.html
在这上面折腾了好一会,都没能找到好的方法,最后只能采用在PHP代码里进行301重定向
新建一个专门用于做301重定向的php文件——301.php:
$go=$_GET['go'];
header("HTTP/1.1 301 Moved Permanently");
header('location:http://android.xiaohuawanpian.com'.$go);
exit;
?>
然后修改httpd.ini,把原来的url访问都经过301.php调整:
RewriteCond Host: ^www\.xiaohuawanpian\.com$
RewriteRule (.*) /301.php\?go=$1 [L]
RewriteCond Host: ^xiaohuawanpian\.com$
RewriteRule (.*) /301.php\?go=$1 [L]
再做一些测试,这种方式完美符合需求:
1、把原域名都301重定向到新的域名
2、除了域名,URL地址的path都保留原来的形式
这时候可以到百度的站长平台提交“网站改版”了。