
1.域名解析
2.网站主机头
匹配顺序为:IIS接到访问请求时,根据域名,首先进行主机头匹配,当匹配到有绑定的主机头时,该主机头的网站进行响应。当无法匹配到绑定的主机头时,空白主机头的网站进行响应。
3.HTTP请求接管
需要考虑请求地址是目录还是具体文件的两种不同情形。
因此接管处理逻辑如果仅仅在原有请求地址上增加前置目录的话,遇到目录地址的请求会重复增加前置目录,导致重写的地址错误。需要分情况处理。
1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Web;
5 using System.Web.Security;
6 using System.Web.UI;
7 using System.Web.UI.WebControls;
8 using System.Web.UI.WebControls.WebParts;
9 using System.Web.UI.HtmlControls;
10
11 namespace RG.SiteHub
12 {
13 /// <summary>
14 /// router 的摘要说明
15 /// </summary>
16
17 public class Router : URLRewriter.BaseModuleRewriter
18 {
19 protected override void Rewrite(string requestedPath, HttpApplication app
20 {
21 string path = requestedPath;
22 Uri url = new Uri(path;//把请求地址字符串转换为URI对象
23 string domain = url.Host; //获取域名部分
24 string SendToPath = url.PathAndQuery; //获取目录,文件,参数部分
25 if (domain == "xxx.com" //匹配请求域名
26 {
27 //判断以“/”为分割的最后一段,是否包含“.”,即可判断来访地址是目录地址还是具体文件
28 string[] sArray = path.Split('/';
29 string laststr = sArray[sArray.Length - 1];
30 if (!laststr.Contains("."
31 {
32 //不包含“.”时请求地址是目录,需要再次判断最后是否带“/”
33 if (SendToPath.Substring(SendToPath.Length - 1, 1 != "/"
34 {
35 //若不带“/”需要补上
36 SendToPath = SendToPath + "/";
37 }
38 //当请求地址是目录时,重写地址补上目录中的默认文件,同时打上参数标记,以示区分请求类型
39 /*
40 * 详细说明:
41 * 当请求类型为文件时,重写地址加上前置目录可以正常访问
42 * 但请求类型为目录时,ASP.NET会首先进行处理一次请求,加上前置目录,在请求默认文件时,会再次进行处理,前置目录就会被重复加上,导致无法重写到真正的地址
43 * 在处理请求发现来源地址是目录时,重写至默认文件并打上标记
44 * 在处理文件类型的请求时,首先判断是否存在标记,若有标记,不再重复添加前置目录
45 */
46 SendToPath = "/sites/001" + SendToPath + "index.aspx?from=dir";
47 }
48
49 //判断是否有标记
50 if (!SendToPath.Contains("?from=dir"
51 {
52 SendToPath = "/sites/001" + SendToPath;
53 }
54 app.Context.RewritePath(SendToPath;//设置重写地址
55 }
56 }
57 }
58 }
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
<httpModules>
<add type="RG.SiteHub.Router" name="URL"/>
</httpModules>
<authentication mode="Windows"/>
<customErrors mode="Off"/>
</system.web>
</configuration>
4.让ASP.NET接管所有类型的文件
鸣谢:
参考:https://blog.csdn.net/os2046/article/details/7714328
作者:冰山英雄
本文作者:码农隐于朝
文章地址:https://www.cnblogs.com/webconfig/p/17156596.html