2013-07-31 69 views
1

代碼低音是IIS 6的Isapi過濾器的主要部分。 我需要將包含「/ some_string」的所有請求重定向到其他URL,其位於其他URL域和其他服務器。 如何做到這一點?IIS 6 Isapi過濾器 - 將請求轉發或重定向到其他域

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

您需要回復302狀態碼,告訴瀏覽器哪個是您想要重定向到的新URL。

只是一個小,不生產級模板來實現這一目標:

// ... 焦炭RSP [50]; wsprintf(rsp,「Location:%s \ r \ n \ r \ n」,newUrlString);服務器支持函數(pfc,SF_REQ_SEND_RESPONSE_HEADER,(PVOID)「302重定向」,(DWORD)rsp,0); // ...

代替

pHeaderInfo-> SetHeader可以(pCtxt-> m_pFC, 「URL」,newUrlString);

我認爲這是你唯一要做的事情。