Windows虚拟主机与VPS如何实现301重定向(asp.net)
2011-12-23 00:00
633 查看
301重定向这么重要,那么如何实现301重定向呢?卢松松在他的《详解301永久重定向实现方法》一文中介绍了多种实现301重定向的方法,但里面的方法对于使用Windows虚拟主机或是Windows VPS的朋友来说,除了单个页面设置重定向可以用上,IIS 服务器实现整站301重定向的方法却无法应用。因为很多的虚拟主机和VPS的提供商不支持用户去做301重定向。本人遇到了这个问题,非常困扰。搜索了很多的资料,或是在论坛、知名SEO博客询问,得到的建议是:虚拟主机通常没办法做301重定向,建议使用独立服务器。能有台独立主机,肯定好了,但银子有限啊。相信很多朋友都遇到了上述问题。
经过一段时间的研究,我终于找到了Windows虚拟主机与VPS实现301重定向的方法,在这与大家分享:
1、第一种方式:通过Web.config配置实现(要求IIS必须为7.0版本)
假设我们需要将jb51.net 301重定向到 www.jb51.net,那么我们在程序根目录下的Web.config文件中的<configuration>节点内加入以下代码,即可。
可惜的是,很多Windows虚拟主机空间用的还是IIS6.0,那么IIS6.0有没有方法实现301重定向呢?请参考第二种方式。
2、第二种方式:通过httpModules的URL拦截实现
我们首先在项目中添加一个新的类库,假设名称叫“SiteSense.Domain”。在此类库下添加一个“DomainLocation”的类,并实现了IHttpModule接口,代码如下:
注:此类库须添加引用“System.Configuration” 和“System.Web”命名空间。
然后我们在程序根目录下的Web.config文件中的<configuration>节点内加入以下代码
在<system.web>节点内的<httpModules>节点,加入以下代码
即可实现301重定向。完成后,我们可以访问jb51.net 发现在浏览器栏内已经自动变为 www.jb51.net 。为了确认301重定向成功,我开发了个检测网页HTTP返回状态值的工具,可以用于检测某网址是否做了301重定向,网址是:http://www.jb51.net/http_header/ 。下图是,我用该工具对做完301重定向后的检测。
上述两种实现301重定向的方法,只适合ASP.NET程序,不适用于ASP程序。
经过一段时间的研究,我终于找到了Windows虚拟主机与VPS实现301重定向的方法,在这与大家分享:
1、第一种方式:通过Web.config配置实现(要求IIS必须为7.0版本)
假设我们需要将jb51.net 301重定向到 www.jb51.net,那么我们在程序根目录下的Web.config文件中的<configuration>节点内加入以下代码,即可。
<system.webServer> <rewrite> <rules> <rule name="Redirect" stopProcessing="true"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^jb51.net$" /> </conditions> <action type="Redirect" url="http://www.jb51.net/{R:0}" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer>
可惜的是,很多Windows虚拟主机空间用的还是IIS6.0,那么IIS6.0有没有方法实现301重定向呢?请参考第二种方式。
2、第二种方式:通过httpModules的URL拦截实现
我们首先在项目中添加一个新的类库,假设名称叫“SiteSense.Domain”。在此类库下添加一个“DomainLocation”的类,并实现了IHttpModule接口,代码如下:
using System; using System.Collections.Generic; using System.Text; using System.Web; using System.Configuration; namespace SiteSense.Domain { public class DomainLocation : IHttpModule { public void Dispose() { } public void Init(HttpApplication context) { context.AuthorizeRequest += (new EventHandler(Process301)); } public void Process301(object sender, EventArgs e) { HttpApplication app = (HttpApplication)sender; HttpRequest request = app.Context.Request; string lRequestedPath = request.Url.DnsSafeHost.ToString(); string strDomainURL = ConfigurationManager.AppSettings["WebDomain"].ToString(); string strWebURL = ConfigurationManager.AppSettings["URL301Location"].ToString(); //拦截到的Url不包含“www.jb51.net”,而包含“jb51.net” if (lRequestedPath.IndexOf(strWebURL) == -1 && lRequestedPath.IndexOf(strDomainURL) != -1) { app.Response.StatusCode = 301; app.Response.AddHeader("Location", lRequestedPath.Replace(lRequestedPath, "http://" + strWebURL + request.RawUrl.ToString().Trim())); app.Response.End(); } } } }
注:此类库须添加引用“System.Configuration” 和“System.Web”命名空间。
然后我们在程序根目录下的Web.config文件中的<configuration>节点内加入以下代码
<appSettings> <add key="WebDomain" value="jb51.net"/> <add key="URL301Location" value="www.jb51.net"/> </appSettings>
在<system.web>节点内的<httpModules>节点,加入以下代码
<add name="DomainLocation" type="SiteSense.Domain.DomainLocation, SiteSense.Domain"/>
即可实现301重定向。完成后,我们可以访问jb51.net 发现在浏览器栏内已经自动变为 www.jb51.net 。为了确认301重定向成功,我开发了个检测网页HTTP返回状态值的工具,可以用于检测某网址是否做了301重定向,网址是:http://www.jb51.net/http_header/ 。下图是,我用该工具对做完301重定向后的检测。
上述两种实现301重定向的方法,只适合ASP.NET程序,不适用于ASP程序。
相关文章推荐
- Windows虚拟主机与VPS如何实现301重定向
- 如何在asp.net中实现返回上一页的功能
- 在Asp.net中图片如何实现上传
- asp.net如何实现删除文件的操作?
- 如何在ASP.NET大型应用系统的模块化开发实现多版本程序集并存支持[转载]
- ASP.NET中如何实现FORM认证登录
- 在ASP.NET中如何用C#.NET实现基于表单的验证
- 如何实现Asp与Asp.Net共享Session
- ASP.NET如何实现迅雷下载功能
- 如何在ASP.NET Core应用中实现与第三方IoC/DI框架的整合?
- ASP.NET WebForm Form表单如何实现MVC那种“自动装配”效果呢?
- asp.net如何实现数字签名(DSACryptoServiceProvider)
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- [ASP.NET教程] C#中如何实现数据拖动?(拖动图片,到TextBox,并显示)
- 如何实现Asp与Asp.Net共享Session
- 如何在ASP.NET Core中实现一个基础的身份认证
- 如何在 ASP.NET 应用程序中实现模拟
- ASP.NET如何实现在用户注册时为用户指定角色
- asp.net C#如何实现if验证不区分大小写