目前虚拟主机商提供将多个域名绑定到站点根目录,但是不提供类似cpanel那样可以将域名绑定到站点的子目录。
而当你手上有多个域名,网站空间和流量又有闲置的时候,是很希望
将这些资源利用起来,而且要做到降低做站的成本。而网络上流传的多域名绑到子目录多为判断HTTP_HOST再使用Asp的Response.Redirect或者php的header方法重订向到子目录去。这种方法在地址的请求上发生了变化,大家都知道Redirect的定向是很不友好的,在服务器端控制自动跳转会令访问者感到不安。
所以我需要的是对这个域名下面的所有请求都转接到对应的子目录里去
比如

http://www.xaradio.com/default.aspx
实际访问的是http://www.3pub.com/xaradio/default.aspx

http://www.xaradio.com/album.aspx?id=722
实际访问的是http://www.3pub.com/xaradio/album.aspx?id=722

http://www.xaradio.com/*.aspx
实际要访问到http://www.3pub.com/xaradio/*.aspx

而绑定到该站点根目录的其他域名和地址仍然不受影响
如: http://www.3pub.com/ 和http://3pub.com/
 http://www.3pub.com/default.aspx和http://3pub.com/default.aspx

http://www.aspxboy.com/484/default.aspx该文章详细的描述了在Asp.Net中使用HttpModule和HttpHander来重写Url,读懂他特别是http://www.aspxboy.com/484/archive.aspx#ekaa将是我们下面工作的前提朋友们可以下载该文章附带的代码研究。

如果您对HttpModule的编成非常熟悉那么可以向下进行了

一。 先把配置文件从web.config内移出为了不让web.config变的非常臃肿,我们将配置文件从web.config内移出
假设我们的多域名绑定配置文件为“MulitDomain.config“
将RewriterConfiguration.cs的public static RewriterConfiguration GetConfig()方法
修改如下:

///
/// 从XML配置文件中返回重写信息
///
/// RewriterConfiguration
public static RewriterConfiguration GetConfig()
{
RewriterConfiguration config = (RewriterConfiguration) BoovooCache.Get(CacheKey);
if(config == null)
{
// 2005-08-18 wu meibo update the config file to SiteUrls.config
// HttpContext.Current.Cache.Insert("RewriterConfig", ConfigurationSettings.GetConfig("RewriterConfig"));
///************************************************************************************
///
///  Author:活靶子,huobazi
/// Date:2005-08-18
///
///  Description:将配置文件移到单独的文件内,更新以下代码,原代码(上一行)停止工作
///
///************************************************************************************
string filePath = String.Empty;
if(HttpContext.Current != null)
{
filePath = HttpContext.Current.Server.MapPath("~/MulitDomain.config");
}
else
{
filePath = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + "MulitDomain.config";
}
XmlSerializer ser = new XmlSerializer(typeof(RewriterConfiguration));
FileStream fileReader = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
StreamReader reader = new StreamReader(fileReader);
config = (ser.Deserialize(reader)) as RewriterConfiguration;
reader.Close();
fileReader.Close();
if (File.Exists(filePath))
{
CacheDependency dep = new CacheDependency(filePath);
BoovooCache.Max(CacheKey,config,dep);
BoovooCache.ReSetFactor(config.CacheFactor);
}
}
return config;
} 

二。做一些修补
RewriterModule.cs内

public virtual void Init(HttpApplication app)
{
///**********************************************************************************
///  Author:活靶子,huobazi
/// Date:2005-08-18
///  Description:增加BeginRequest,在内增加防止黑客可能利用的某些Url漏洞攻击的代码
///**********************************************************************************
app.BeginRequest += new EventHandler(this.RewriterModule_BeginRequest);
// 警告!此代码不适用于 Windows 身份验证!
// 如果使用 Windows 身份验证,
// 请改为 app.BeginRequest
app.AuthorizeRequest += new EventHandler(this.RewriterModule_AuthorizeRequest);
} 
protected virtual void RewriterModule_BeginRequest(object o , EventArgs e)
{
HttpApplication app = ((HttpApplication)(o));
HttpServerUtility Server = app.Server;
HttpRequest Request = app.Request;
///************************************************************
///  Author:活靶子,huobazi
/// Date:2005-08-18
/// Description:修补黑客可能采用".."的方法进入其他目录的问题
///************************************************************
string strURL = Server.UrlDecode(Request.RawUrl);
if (strURL.IndexOf("..") != -1)
{
throw new HttpException(404, "Not Found");
}
///**********************************************************************************
///  Author:活靶子,huobazi
/// Date:2005-08-18
/// Description:修补"规范化"问题 see: http://support.microsoft.com/?kbid=887459
///***********************************************************************************
if (Request.Path.IndexOf('\\') >= 0 ||
Path.GetFullPath(Request.PhysicalPath) != Request.PhysicalPath)
{
throw new HttpException(404, "Not Found");
}
} 

三。开始匹配域名

protected void Rewrite(string requestedPath, System.Web.HttpApplication app)
{
string host = app.Context.Request.Url.Host.ToString().ToLower();
app.Context.Trace.Write("RewriterModule", "Entering ModuleRewriter");
RewriterRuleCollection rules = RewriterConfiguration.GetConfig().Rules;
for(int i = 0; i < rules.Count; i++)
{//将MulitDomain.config内定义的规则LookFor的值逐个匹配当前主机名判断否被定义了需要重写
//如果匹配则需要重写,那将请求重写到SendTo定义的目录内的该文件
string lookFor = "^" + rules[i].LookFor + "$";
//string lookFor = "^" + Rewriter.ResolveUrl(app.Context.Request.ApplicationPath, rules[i].LookFor + requestedPath) + "$";
Regex re = new Regex(lookFor, RegexOptions.IgnoreCase);
if (re.IsMatch(host))
{
string sendToUrl = Rewriter.ResolveUrl(app.Context.Request.ApplicationPath,  rules[i].SendTo + requestedPath);
app.Context.Trace.Write("RewriterModule", "Rewriting URL to " + sendToUrl);
Rewriter.RewriteUrl(app.Context, sendToUrl);
break;
}
}
app.Context.Trace.Write("RewriterModule", "Exiting ModuleRewriter");
}

四。写规则文件
MulitDomain.config的匹配规则如下:

<?xml version="1.0" encoding="utf-8" ?>
 <RewriterConfig>
 <Rules>
  <RewriterRule>
   <LookFor>www\.xaradio\.com</LookFor>
   <SendTo>~/xaradio</SendTo>
  </RewriterRule>
  <RewriterRule>
   <LookFor>xaradio\.com</LookFor>
   <SendTo>~/xaradio</SendTo>
  </RewriterRule>
 </Rules>
  </RewriterConfig>
最后说明一下,根目录下一定要有一个Default.aspx如果你的所有域名都按照这种方式“绑定”那么根目录下放置一个空Default.aspx就可以,该文件来“欺骗IIS” ,防止直接使用域名访问的时候IIS查找不到default或者index文件就报404错误,等到该检查过去之后权利已经移交到aspnet_isapi.dll那里了。

转载于:https://www.cnblogs.com/skylaugh/archive/2007/04/04/699462.html

使用HttpModule实现多个域名分别“绑定”到子目录相关推荐

  1. 我有一个域名_一个域名可以绑定几个网站?域名解析多少子域名?

    一个域名可以绑定几个网站?域名解析多少子域名?一个域名可以解析无数的子域名,这些子域名是顶级域名的下一级,整个域名包含两个."或者包括"."等等.下面聚名网小编就带大家看 ...

  2. 腾讯云域名如何绑定ip地址

    域名解析的前提是首先要拥有一个域名.如何把你的域名绑定你的公网ip? 这就需要域名解析,云服务有提供云解析的功能.本文是通过腾讯云操作讲解如何绑定域名. 官网域名绑定教程:腾讯云如何绑定域名(腾讯云域 ...

  3. 云服务器如何绑定域名(腾讯云域名如何绑定ip)

    要域名解析,肯定你首先要拥有一个域名. 如何把你的域名绑定你的公网ip? 这就需要域名解析,云服务有提供云解析的功能. 本文是基于腾讯云讲解如何绑定域名. 官网域名绑定教程:腾讯云如何绑定域名(腾讯云 ...

  4. 域名解析、域名空间绑定,两种截然不同概念

    动态域名为何需要解析?其实,域名解析是网站维护的基本环节.对于非互联网专业人士来说,动态域名解析是难题.那么,到底动态域名如何解析成功呢?这里我们就来了解一下域名解析知识. 首先要注册域名,购买虚拟主 ...

  5. 如何申请域名并绑定ip

    如何申请域名并绑定ip web访问中经常会访问类似http://blog.csdn.net 这样的链接, 域名申请步骤: 1.搭建具有固定ip的服务器, 2.申请域名 3.将域名解析绑定到服务器的固定 ...

  6. 搜狐快站创建的个人站点域名如何绑定自己的独立域名

    最近在群里和圈子里碰到很多人在问快站建立的个人站点域名如何绑定自己的独立域名, 紫夜就在这里详细为大家讲解下关于快站域名绑定问题.其实很简单,只需要三步就可以完成, 首先大家花点时间可以了解下什么是独 ...

  7. 主机虚拟服务器 域名如何绑定,西部数码虚拟主机绑定域名教程

    注意:如果你购买的不是.org这个后缀的域名,需要先进行实名认证,详见:<如何提交域名实名认证?>,域名实名认证通过后才能继续下面的操作. 如果你不想实名认证怎么办?那么,你就要注册.or ...

  8. 万网绑定二级域名_万网主机怎么把二级域名绑定到子目录?

    我们在使用万网主机时,经常会需要绑定多个域名,从而实现PC站一个域名,手机站一个域名,有些MIP一个域名!可是万网虽然支持绑定多个域名,却没有地方可以设置这些二级域名绑定到网站子目录! 今天,46仿站 ...

  9. 腾讯云注册的域名怎么绑定ip?

    首先要先弄个宝塔 输入公网ip要能看到下图才算成功.看这位大神教你 然后就可以开始我们的绑定啦! 1.点击腾讯云的控制台: 2.点击域名注册: 3.我的已经注册好了,如果你没注册先去注册.备案. 4. ...

最新文章

  1. Facebook开源多款AI工具,支持游戏、翻译等
  2. 【转】pdf 中如何把几页缩小成一页打印
  3. Ubuntu gbk,utf-8 转换
  4. python中的函数修饰符
  5. [转]ArcGIS.Server.9.3和ArcGIS API for Flex实现Toolbar功能(四)
  6. nginx源码分析—模块及其初始化
  7. 机器学习笔记(十三)——隐马尔科夫模型
  8. 字符设备驱动 架构分析
  9. 用Windows身份验证访问数据库时,出现“用户 'YSBY-PC\ASPNET' 登录失败。”,这YSBY是我的计算机名。...
  10. SPSS 数据编辑器界面 度量 名义 序号 标签
  11. linux虚拟主机用织梦,织梦程序用什么虚拟主机很服务器好
  12. 郭天祥的10天学会51单片机_第十一节
  13. Step ‘Publish JUnit test result report’ failed: No test report files were found问题解决
  14. java发送通知栏样式_Android 通知栏Notification详解
  15. nyoj-741-“数学家“ST
  16. 深圳社保明细查询, 深圳社保参保证明
  17. 【kindle】使用Typora+Calibre自制电子书
  18. 往数据库里添加date(时间)类型的数据
  19. POP3协议,SMPT协议,IAMP协议介绍:
  20. TensorFlow2.0基础学习笔记

热门文章

  1. python女朋友_教你用Python感知女朋友的情绪变化!
  2. 火灾火焰检测数据集和yolov4检测模型
  3. linux先cd到mysql的运行路径下,Linux常用的服务器运维命令
  4. python实现不重复排列组合_Python使用combinations实现排列组合的方法
  5. 基于人脸识别的课堂签到管理系统(四)---摄像头上传实时数据,百度AI读取并返回信息以及多线程操作
  6. Python爬虫抓取 python tutorial中文版,保存为word
  7. JS无刷新修改URL类似博客园翻页效果
  8. jquery的mCustomScrollbar滚动条创建在ie8下报frameElement的相关错
  9. 【工业串口和网络软件通讯平台(SuperIO)教程】二.架构和组成部分
  10. Qt 遍历目录下所有图片