IIS 6 Isapi筛选器-将请求转发或重定向到其他域

IIS 6 Isapi filter - forward or redirect requets to other domain

本文关键字:转发 重定向 其他 请求 Isapi 筛选 IIS      更新时间:2023-10-16

下面的代码是我的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;
}

谢谢!

您需要用302状态代码进行响应,告诉浏览器您要重定向到哪个新URL。

只是一个小的,不是生产级模板来实现这一点:

//。。。char rsp[50];wsprintf(rsp,"位置:%s\r\n\r\n",newUrlString);pfc->ServerSupportFunction(pfc,SF_REQ_SEND_RESPONSE_HEADER,(PVOID)"302重定向",(DWORD)rsp,0);//。。。

而不是

pHeaderInfo->SetHeader(pCtxt->m_pFC,"url",newUrlString);

我认为这是你唯一要做的事情。