IIS下301跳转方法:ISAPI_Rewrite伪静态重写+PHP301

时间:2022-11-09 17:29:47

今天把网站域名更为二级域名,准备把原来伪静态的页面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:

<?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都保留原来的形式

这时候可以到百度的站长平台提交“网站改版”了。