Godaddy Windows主机空间的html文件301重定向设置方法
来源:何草不黄 时间:2010-04-11 13:07:00
1.如果你是linux主机请使用.htaccess文件,无需看下去.
2.如果你是独立主机,可以操作IIS,也无需看下去.
3.如果你是动态文件重定向(ASP ,ASP.NET,PHP,JSP),那会有N种方法可以解决,也无需看下去.
4.如果你只是网站域名重定向,或是单一页面重定向(首页),也无需看下去.虽然我的方法也可以解决,但是还有更简单的解决方式,百度一下吧.
5.我这篇文档是提供给没有编程经验的新人站长看的,如果是程序员,你可以自己去修改web.config实现,我这里会很啰嗦,浪费你的时间!
我的网站–品客网 购买的是Godaddy的windows空间,由于网站发展需要,必须调整结构,从2层目录变为3层,GD的win主机不像linux主机后台控制面板提 供转向功能,也不能使用.htaccess文件,更不可能让客服帮我配置IIS.如果是动态文件或是单个文件这些都好解决,唯独碰上html文件,只能使 用web.config来解决.
有人会说html也可以通过js来转向,我明确的告诉你,那是错误的,对于浏览者来说或许可以转向,但是对于搜索引擎来说,如果已经读取到js了, 就是200了,说明文件正常,根本不会转向,不是什么301重定向,即使仅仅考虑浏览者,每个页面改写内容为js跳转,也不是一个好的选择.
有人会说我可以保留旧文件,那样就不影响搜索引擎的收录,那么你是否考虑过,搜索引擎对于你整个网站内容重复的厌恶和反感?这样做和重复关键字也没 有太大区别.
言归正传,我的网站原来存在大量的页面是这样的:
http://www.pingke.info/20100317/news42.htm
http://www.pingke.info/20100317/News44.htm
http://www.pingke.info/20100314/News46.htm
…..
修改后,变为
http://www.pingke.info/news/20100317/news42.htm
http://www.pingke.info/news/20100317/News44.htm
http://www.pingke.info/news/20100314/News46.htm
就是在原来的”/年月日/”目录前增加了”/news/”这个目录.
用重定向规则,这样写就可以了
<rule name=”History”>
<match url=”^([0-9]+)/([\w]+).htm$” ignoreCase=”false” />
<action type=”Rewrite” url=”news/{R:1}/{R:2}.htm” appendQueryString=”false” />
</rule>
解释:
<rule name=”History”>命名一个规则叫”History”,可以随意起名;
<match url=”^([0-9]+)/([\w]+).htm$” ignoreCase=”false” />
表示匹配(match)一个数字(0到9)命名的目录,数字个数不限(+表示1个或多个),然后以数字或是字母命名的,htm为后缀的路 径.ignoreCase为false表示不忽略大小写.
<action type=”Rewrite” url=”news/{R:1}/{R:2}.htm” appendQueryString=”false” />表示将上面的链接重定向到一个添加了一层”/news/”目录的路径下,当然,要获取重上面匹配项中获取的2个参数,分别用{R:1}和 {R:2}表示,如果你有3个参数,以此类推{R:3}.
另外说明一下,match 表达式中通过”()”来获取参数,按数序以此为第1,2…个参数.
同样的方法,我还有一些文件是存放在”/news/”文件夹下的:
http://www.pingke.info/news/sport.htm
http://www.pingke.info/news/internet.htm
http://www.pingke.info/news/news49.htm
需要调整为:
http://www.pingke.info/news/today/sport.htm
http://www.pingke.info/news/today/internet.htm
http://www.pingke.info/news/today/news49.htm
规则如下:
<rule name=”Today”>
<match url=”^news/([\w]+).htm$” ignoreCase=”false” />
<action type=”Rewrite” url=”news/today/{R:1}.htm” appendQueryString=”false” />
</rule>
在/news/目录和文件之间增加了一层/today/目录,用来存放当天的新闻.
<match url=”^news/([\w]+).htm$” ignoreCase=”false” />
表示匹配news目录打头,数字或字母命名,以htm后缀结尾的路径.中间只需取文件名一个变量.
<action type=”Rewrite” url=”news/today/{R:1}.htm” appendQueryString=”false” />
表示转向到/news/today/+原文件名.htm的路径.
这样就OK了.
完整web.config文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name=”Today”>
<match url=”^news/([\w]+).htm$” ignoreCase=”false” />
<action type=”Rewrite” url=”news/today/{R:1}.htm” appendQueryString=”false” />
</rule>
<rule name=”History”>
<match url=”^([0-9]+)/([\w]+).htm$” ignoreCase=”false” />
<action type=”Rewrite” url=”news/{R:1}/{R:2}.htm” appendQueryString=”false” />
</rule>
</rules>
</rewrite>
<httpErrors errorMode="Detailed" />
<asp scriptErrorSentToBrowser="true" />
</system.webServer>
<system.web>
<customErrors mode="Off" />
<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" />
</system.web>
</configuration>