IIS 6 Isapi filter - пересылать или перенаправлять запросы в другой домен
Ниже приведен код основной части моего фильтра Isapi для IIS 6. Мне нужно перенаправить весь запрос, содержащий "/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;
}
Спасибо!
1 ответ
Вам нужно ответить кодом состояния 302, сообщив браузеру, какой новый URL вы хотите перенаправить.
Просто маленький, не производственный шаблон для достижения этой цели:
//... char rsp [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);
Я думаю, что это единственное, что вам нужно сделать.