vc实现isapi_rewrite
isapi_rewrite是什么东西,应该不用我说了吧,不明白的去学习一下先。它的行为,大多是像Apache的mod_rewrite ,而且是专为微软的Internet信息服务器( IIS ) 开发的。
本文说的只是简单的用vc制作一个isapi程序,使网页达到伪静态的目的,结果如下:
访问 http://localhost/d/1,在服务器端实际访问地址为http://localhost/p/index.asp?param=1
这样做的好处就是,前面的URL(http://localhost/d/1),对搜索引擎来说,非常友好,且用户更容易记住,每次看到类似后面这样一长串的地址有点抓狂。
程序非常简单,一路用vc的向导建立一个isapi应用就可以了。
再在
OnPreprocHeaders(CHttpFilterContext* pCtxt,
PHTTP_FILTER_PREPROC_HEADERS pHeaderInfo)
中添加一些代码就可以实现这个功能了,源码如下:
{
char buffer[256];
DWORD buffSize = sizeof(buffer);
BOOL bHeader = pHeaderInfo->GetHeader(pCtxt->m_pFC, "url",
buffer, &buffSize);
CString urlString(buffer);
urlString.MakeLower(); // for this exercise
if(urlString.Find("/d/") != -1)
{
urlString.Replace("/d/","/p/index.asp?d=");
char *newUrlString = urlString.GetBuffer(urlString.GetLength());
pHeaderInfo->SetHeader(pCtxt->m_pFC,"url",newUrlString);
return SF_STATUS_REQ_HANDLED_NOTIFICATION;
}
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
编译,然后在IIS管理器中,加入生成的isapi dll文件就可以了:)
不过,当然没有isapi_rewrite哪么强大,在它的免费版中也有这样的功能,不过,有些时候用一个东西,而不知道它的原理,实在是不怎么高明。
[Blog.Const.Net.Cn]
永久链接地址:
知识库 vc实现isapi_rewrite