asp.net URL 重写 附IIS配置+源码
2010-01-12 10:23
483 查看
这里给大家ISAPI重写URL的其中一个方法。
这是以前C# + Oracle 开发B/S的时候用到的。
相关下载
还是那句。@2008 ATGO 版权所有. 保留所有权利,仅供学习使用。
ATGO_IRewrite.cpp的代码如下:
配置文件只有在运行的时候才会读取,这里提供了正则来用于不用重启IIS来重读配置文件
读取配置文件:
配置文件说明:
RewriteEngine on
RewriteLogger on
RewriteRule .*/(.*)\.atgo /$1.htm
第一行是开启URL重写
第二行是开启日志
第三行是对URL进行正则匹配,Pattern为.*/(.*)\.atgo,如果匹配成功,则转换成/$1.htm
其中$1是前面正则中()的值。
安装说明:
1.把ATGO_IRewrite.ini放到C盘根目录下;
2.把ATGO_IRewrite.dll添加到IIS的ISAPI里;
注:如果是NTFS格式的要设置一下配置文件的权限
3.重启IIS服务。
效果图:
这是以前C# + Oracle 开发B/S的时候用到的。
相关下载
还是那句。@2008 ATGO 版权所有. 保留所有权利,仅供学习使用。
ATGO_IRewrite.cpp的代码如下:
配置文件只有在运行的时候才会读取,这里提供了正则来用于不用重启IIS来重读配置文件
读取配置文件:
1//初始化配置 2bool ListInit() 3 //释放配置 bool ListRelease() { 代码1DWORD CATGO_IRewriteFilter::OnPreprocHeaders(CHttpFilterContext* pCtxt, 2 PHTTP_FILTER_PREPROC_HEADERS pHeaderInfo) 3{ 4 // TODO: React to this notification accordingly and 5 // return the appropriate status code 6 7 //获取hostname 8 char server_name[2048]; 9 DWORD buffSize_server_name = sizeof(server_name); 10 BOOL bHeader_server_name = pCtxt->GetServerVariable("SERVER_NAME", server_name, &buffSize_server_name); 11 12 //获取url 13 char buffer[2048]; 14 DWORD buffSize = sizeof(buffer); 15 BOOL bHeader = pHeaderInfo->GetHeader(pCtxt->m_pFC, "url", 16 buffer, &buffSize); 17 18 cmatch match; 19 fstream fs; 20 21 //特别码 22 if (boost::regex_match(buffer, match, regexAtgo)) 23 { 24 for (int i=1; i<match.size(); i++) 25 { 26 string strMatch = match[i]; 27 28 if (strMatch == "Release") 29 { 30 ListRelease(); 31 if (isLogger) 32 { 33 fs.open("C:\\Log\\ATGO_IRewrite_Error.log", ios::in | ios::app | ios::binary | ios::out | ios::ate); 34 string error = "错误代码1004-1!请与kx.ATGO@hotmail.com联系!"; 35 fs.write(error.c_str(), error.length()); 36 fs.write("\r\n", ::strlen("\r\n")); 37 fs.close(); 38 } 39 } 40 else if (strMatch == "Init") 41 { 42 ListInit(); 43 44 if (isLogger) 45 { 46 fs.open("C:\\Log\\ATGO_IRewrite_Error.log", ios::in | ios::app | ios::binary | ios::out | ios::ate); 47 string error = "错误代码1004-2!请与kx.ATGO@hotmail.com联系!"; 48 fs.write(error.c_str(), error.length()); 49 fs.write("\r\n", ::strlen("\r\n")); 50 fs.close(); 51 } 52 } 53 else if (strMatch == "Cmd") 54 { 55 ; 56 } 57 if (isLogger) 58 { 59 fs.open("C:\\Log\\ATGO_IRewrite_Error.log", ios::in | ios::app | ios::binary | ios::out | ios::ate); 60 string error = "警告代码1004-3!" + strMatch + "请与kx.ATGO@hotmail.com联系!"; 61 fs.write(error.c_str(), error.length()); 62 fs.write("\r\n", ::strlen("\r\n")); 63 fs.close(); 64 } 65 } 66 } 67 68 69 if (listItem.size() > 0) 70 { 71 string str = ""; 72 73 string allUrl = "http://"; 74 allUrl = allUrl + server_name; 75 allUrl = allUrl + buffer; 76 77 if (isLogger) 78 { 79 fs.open("C:\\Log\\ATGO_IRewrite_log.log", ios::in | ios::app | ios::binary | ios::out | ios::ate); 80 str = "原始进来的URL:" + allUrl; 81 fs.write(str.c_str(), str.length()); 82 fs.write("\r\n", ::strlen("\r\n")); 83 fs.close(); 84 } 85 86 //从配置文件中的配置,找相关匹配 87 for (list<CItem>::iterator it = listItem.begin(); it != listItem.end(); it++) 88 { 89 CItem ci = (*it); 90 boost::regex regex(ci.regex, boost::regex::icase); 91 92 if (boost::regex_match(allUrl, match, regex)) 93 { 94 string temp = ci.target; 95 for (int i=1; i<match.size(); i++) 96 { 97 char buffer[128]; 98 ::sprintf(buffer, "$%d", i); 99 string str = buffer; 100 int index = temp.find(str, 0); 101 if (index != -1) 102 { 103 temp = temp.replace(index, str.length(), match[i]); 104 } 105 } 106 allUrl = temp; 107 if (isLogger) 108 { 109 fs.open("C:\\Log\\ATGO_IRewrite_log.log", ios::in | ios::app | ios::binary | ios::out | ios::ate); 110 str = "按正则生成URL为:" + allUrl; 111 fs.write(str.c_str(), str.length()); 112 fs.write("\r\n", ::strlen("\r\n")); 113 fs.close(); 114 } 115 break; 116 } 117 } 118 119 if (allUrl != "") 120 { 121 int itemp = 0; 122 itemp =allUrl.find_first_of("//"); 123 124 if (itemp > 0) 125 { 126 allUrl = allUrl.substr(itemp + 2, allUrl.length()); 127 128 itemp = allUrl.find_first_of("/"); 129 allUrl = allUrl.substr(itemp, allUrl.length()); 130 } 131 if (isLogger) 132 { 133 fs.open("C:\\Log\\ATGO_IRewrite_log.log", ios::in | ios::app | ios::binary | ios::out | ios::ate); 134 str = "重定向URL为" + allUrl; 135 fs.write(str.c_str(), str.length()); 136 fs.write("\r\n", ::strlen("\r\n")); 137 fs.write("\r\n", ::strlen("\r\n")); 138 fs.close(); 139 } 140 141 pHeaderInfo->SetHeader(pCtxt->m_pFC, "url", (char *)allUrl.c_str()); 142 } 143 } 144 145 return SF_STATUS_REQ_NEXT_NOTIFICATION; 146}
配置文件说明:
RewriteEngine on
RewriteLogger on
RewriteRule .*/(.*)\.atgo /$1.htm
第一行是开启URL重写
第二行是开启日志
第三行是对URL进行正则匹配,Pattern为.*/(.*)\.atgo,如果匹配成功,则转换成/$1.htm
其中$1是前面正则中()的值。
安装说明:
1.把ATGO_IRewrite.ini放到C盘根目录下;
2.把ATGO_IRewrite.dll添加到IIS的ISAPI里;
注:如果是NTFS格式的要设置一下配置文件的权限
3.重启IIS服务。
效果图:
相关文章推荐
- ASP.net URL重写后IIS配置的配置方案
- ASP.NET的URL地址重写(伪静态)示例配置
- asp.net下实现URL重写伪静态之iis设置
- SEO_ASP.net SEO优化(包含URL地址重写\viewState移动和压缩至服务器\SEO信息XML生成_根据URL地址重写文件)\web网站内容压缩 源码公开.本人授权可使用于商业项目。
- IIS7.5(经典/集成),IIS6,asp.net 4.0下配置Url映射(asp.net mvc)
- ASP.NET(C#)URL重写的源码
- 没有为扩展名“.html”注册的生成提供程序。.net urlwrite 重写 伪静态 IIs 配置
- IIS7.5(经典/集成),IIS6,asp.net 4.0下配置Url映射(asp.net mvc)
- 没有为扩展名“.html”注册的生成提供程序。.net urlwrite 重写 伪静态 IIs 配置
- IIS UrlWriter配置(asp.net)
- IIS URL重写模块和ASP.NET路由组件比较
- 没有为扩展名“.html”注册的生成提供程序。.net urlwrite 重写 伪静态 IIs 配置
- asp.net地址重写代码与IIS7.5中地址重写的配置方法(图)
- 在 ASP.NET 中执行 URL 重写
- asp.net用url重写URLReWriter实现任意二级域名
- 在 ASP.NET 中执行 URL 重写
- 在ASP.NET中重写URL的代码
- asp.net用url重写URLReWriter实现任意二级域名 (转)
- asp.net使用UrlRewritingNet重写url
- C# ASP.NET 通用权限管理系统组件源码中WCF例子程序客户端运行详细配置参考