Код ниже является основной частью моего фильтра 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;
}
Спасибо!
Вам нужно ответить кодом состояния 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);
Я думаю, что это единственное, что вам нужно сделать.
Других решений пока нет …