301重定向
时间:2010-08-24 来源:逐月
我们网站有一个问题一直困扰着我,就是存在两个域名kuchechina.com,http://www.kuchechina.com/
虽说是以http://www.kuchechina.com/为主,但是site我们的域名,隔几页也会有不带www的。怕影响我们域名权重,决定做301重定向。
以前只是听说过301重定响,没有做过。这次做起来,还真遇到一些问题。
IIS重向定,设置比较麻烦,去网上查一些资料,参数都是一堆一堆的,又很难弄明白是怎么回事,就放弃了。下面就想做URL跳转。
URL跳转逻辑很简单,aspx请求可以用HttpModule接管,在HttpModule写跳转问题不是很容易解决了吗?
下面是我的代码
namespace Cars.UI
{
public class HttpModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
}
private void Application_BeginRequest(Object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;
string redirectUrl = "http://www.kuchechina.com";
string requestUrl = context.Request.Url.ToString();
redirectUrl = requestUrl.Replace("http://kuchechina.com", redirectUrl);
context.Response.Clear();
context.Response.StatusCode = 301;
context.Response.Status = "301 Moved Permanently";
context.Response.AddHeader("Location", redirectUrl);
context.Response.End();
}
public void Dispose()
{
}
}
}
代码全总在这里,想了解的朋友可以下载
/Files/zhuyue/301Redirect.rar
实现起来简单,可问题又出现了,要是域名路径中带目录,如:kuchechina.com/News/没有页面文件,就返回404错误了。怎么办呢?问题不好解决。再研究研究IIS重定向吧。问题还真的搞定了
IIS设置如下:
参数意义
$S 传送与所请求 URL 的相匹配的后缀。匹配后缀是用重定向的 URL 代替之后,初始 URL 中所保留的部分。 如果 /Scripts 重定向到 /Newscripts,而原来请求的是 /Scripts/Program.exe,那么 /Program.exe 便是后缀。服务器自动执行后缀替换,$S 变量只能与其他变量结合使用。
$Q 传递来自初始 URL 的问号 (?) 和参数。 例如,如果原来的 URL 是 /Scripts/Myscript.asp?number=1,那么字符串“?number=1”映射到目标 URL。