Windows虚拟主机与VPS如何实现301重定向(asp.net)
网络编程 2021-07-04 22:40www.168986.cn编程入门
301重定向应该是研究SEO必须掌握的技术。如果你是刚接触SEO的菜鸟,想了解什么是301重定向,请看《html实现301重定向的方法》一文,我在该篇随笔中引用了Google网站站长工具对301重定向的解释
301重定向这么重要,那么如何实现301重定向呢?卢松松在他的《详解301永久重定向实现方法》一文中介绍了多种实现301重定向的方法,但里面的方法对于使用Windows虚拟主机或是Windows VPS的朋友来说,除了单个页面设置重定向可以用上,IIS 服务器实现整站301重定向的方法却无法应用。因为很多的虚拟主机和VPS的提供商不支持用户去做301重定向。本人遇到了这个问题,非常困扰。搜索了很多的资料,或是在论坛、知名SEO博客询问,得到的建议是虚拟主机通常没办法做301重定向,建议使用独立服务器。能有台独立主机,肯定好了,但银子有限啊。相信很多朋友都遇到了上述问题。
经过一段时间的研究,我终于找到了Windows虚拟主机与VPS实现301重定向的方法,在这与大家分享
1、第一种方式通过Web.config配置实现(要求IIS必须为7.0版本)
假设我们需要将jb51. 301重定向到 .jb51.,那么我们在程序根目录下的Web.config文件中的<configuration>节点内加入以下代码,即可。
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect" sProcessing="true">
<match url="." />
<conditions>
<add input="{HTTP_HOST}" pattern="^jb51.$" />
</conditions>
<action type="Redirect" url="https://.jb51./{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不包含“.jb51.”,而包含“jb51.”
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."/>
<add key="URL301Location" value=".jb51."/>
</appSettings>
在<system.web>节点内的<httpModules>节点,加入以下代码
即可实现301重定向。完成后,我们可以访问jb51. 发现在浏览器栏内已经自动变为 .jb51. 。为了确认301重定向成功,我开发了个检测网页HTTP返回状态值的工具,可以用于检测某网址是否做了301重定向,网址是https://.jb51./http_header/ 。下图是,我用该工具对做完301重定向后的检测。
经过一段时间的研究,我终于找到了Windows虚拟主机与VPS实现301重定向的方法,在这与大家分享
1、第一种方式通过Web.config配置实现(要求IIS必须为7.0版本)
假设我们需要将jb51. 301重定向到 .jb51.,那么我们在程序根目录下的Web.config文件中的<configuration>节点内加入以下代码,即可。
代码如下:
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect" sProcessing="true">
<match url="." />
<conditions>
<add input="{HTTP_HOST}" pattern="^jb51.$" />
</conditions>
<action type="Redirect" url="https://.jb51./{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不包含“.jb51.”,而包含“jb51.”
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."/>
<add key="URL301Location" value=".jb51."/>
</appSettings>
在<system.web>节点内的<httpModules>节点,加入以下代码
代码如下:
<add name="DomainLocation" type="SiteSense.Domain.DomainLocation, SiteSense.Domain"/>
即可实现301重定向。完成后,我们可以访问jb51. 发现在浏览器栏内已经自动变为 .jb51. 。为了确认301重定向成功,我开发了个检测网页HTTP返回状态值的工具,可以用于检测某网址是否做了301重定向,网址是https://.jb51./http_header/ 。下图是,我用该工具对做完301重定向后的检测。
上述两种实现301重定向的方法,只适合ASP.NET程序,不适用于ASP程序。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程