下面的代码是IIS 6的Isapi过滤器的主要部分。 我需要将包含“/ some_string”的所有请求重定向到位于其他域和其他服务器上的其他URL。 怎么做?
DWORD CAmgnIsapiFilter::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();
if (urlString.Find("/some_string") != -1) //we want to redirect this file
{
urlString.Replace("/some_string","");
urlString = "http://new_domain.cz/something" + urlString;
char * newUrlString= urlString.GetBuffer(urlString.GetLength());
pHeaderInfo->SetHeader(pCtxt->m_pFC, "url", newUrlString);
return SF_STATUS_REQ_HANDLED_NOTIFICATION;
}
//we want to leave this alone and let IIS handle it
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
谢谢!
答案 0 :(得分:0)
您需要回复302状态代码,告诉浏览器您要重定向到的新网址。
只是一个很小的,而不是生产级模板来实现这一目标:
// ... char rsp [50]; wsprintf(rsp,“Location:%s \ r \ n \ r \ n”,newUrlString); pfc-> ServerSupportFunction(pfc,SF_REQ_SEND_RESPONSE_HEADER,(PVOID)“302 Redirect”,(DWORD)rsp,0); //...
而不是
pHeaderInfo-> SetHeader(pCtxt-> m_pFC,“url”,newUrlString);
我认为这是你唯一要做的事情。