c++ - IIS 6 Isapi 过滤器 - 将请求转发或重定向到其他域

标签 c++ iis-6 isapi isapi-rewrite isapi-redirect

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

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

//... 字符响应[50]; wsprintf(rsp, "位置: %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);

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

关于c++ - IIS 6 Isapi 过滤器 - 将请求转发或重定向到其他域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17975086/

相关文章:

c++ - 模板语法模板

java - 获取 jstring/char * 的长度?

asp-classic - cdoSendUsingPort 给出 8004020f 但 cdoSendUsingPickup 有效

iis-6 - 如何以编程方式禁用 iis 6 中的 Etag

isapi - 如何调试 ISAPI 过滤器?

c++ - 我可以创建一个文件来提及我要构建的所有文件 : c++

c++二维数组问题

php - 如何限制从 PHP 发送的出站 SMTP 邮件

web-services - 如何在 Apache 2.3 上安装 Delphi Webservice ISAPI 模块

IIS -> Isapi_Redirect -> Tomcat