Как реализовать сабж в OnUrlMap?
При неправильном запросе (404) нужно переслать обработку на реальный скрипт, например это будет ASP (может быть что угодно, например SSI или что другое).
Сие вообще возможно?
14.02.03 17:21: Перенесено модератором из 'C/C++' — ПК
Здравствуйте, ibnTeo, Вы писали:
T>Как реализовать сабж в OnUrlMap?
Полный аналог Server.Transfer никак.
T>При неправильном запросе (404) нужно переслать обработку на реальный скрипт, например это будет ASP (может быть что угодно, например SSI или что другое).
Неправильный запрос — это 400, а не 404.
T>Сие вообще возможно?
T>>Как реализовать сабж в OnUrlMap? L>Полный аналог Server.Transfer никак.
T>>При неправильном запросе (404) нужно переслать обработку на реальный скрипт, например это будет ASP (может быть что угодно, например SSI или что другое). L>Неправильный запрос — это 400, а не 404.
Это не принципиально, все равно все запросы обрабатываю.
T>>Сие вообще возможно? L>В ограниченных масштабах.
Интересует даже не Server.Transfer, а возможность передать обработку дальше, но с исправленным URL.
Что-то вроде:
DWORD CTest1::OnUrlMap(CHttpFilterContext * pCtxt,PHTTP_FILTER_URL_MAP pMapInfo)
{
pMapInfo->cbPathBuff="/test.asp";
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
Здравствуйте, ibnTeo, Вы писали:
L>>Неправильный запрос — это 400, а не 404. T>Это не принципиально, все равно все запросы обрабатываю.
Щаз... 400 ты никогда не сможешь обработать.
T>>>Сие вообще возможно? L>>В ограниченных масштабах. T>Интересует даже не Server.Transfer, а возможность передать обработку дальше, но с исправленным URL. T>Что-то вроде: T>DWORD CTest1::OnUrlMap(CHttpFilterContext * pCtxt,PHTTP_FILTER_URL_MAP pMapInfo) T>{ T> pMapInfo->cbPathBuff="/test.asp"; T> return SF_STATUS_REQ_NEXT_NOTIFICATION; T>}
Да легко. Только к 404 это имеет мало отношения. На этапе мапинга url'я ни ты, ни сервер не знаете, существует ли запрашиваемый ресурс.
T>P.S. не смейтесь сильно, я новичок в C++
Пиши на дельфях, там вроде тоже можно ISAPI клепать.
L>>>Неправильный запрос — это 400, а не 404. T>>Это не принципиально, все равно все запросы обрабатываю. L>Щаз... 400 ты никогда не сможешь обработать.
Проехали
T>>>>Сие вообще возможно? L>>>В ограниченных масштабах. T>>Интересует даже не Server.Transfer, а возможность передать обработку дальше, но с исправленным URL. T>>Что-то вроде: T>>DWORD CTest1::OnUrlMap(CHttpFilterContext * pCtxt,PHTTP_FILTER_URL_MAP pMapInfo) T>>{ T>> pMapInfo->cbPathBuff="/test.asp"; T>> return SF_STATUS_REQ_NEXT_NOTIFICATION; T>>}
L>Да легко. Только к 404 это имеет мало отношения. На этапе мапинга url'я ни ты, ни сервер не знаете, существует ли запрашиваемый ресурс.
Может для вас это легко, подскажите хоть куда копать.
Сейчас в доке роюсь, видимо что-то связанное с pCtxt->ServerSupportFunction();
Хотя вряд-ли. Как бы подменить входящие данные...
T>>P.S. не смейтесь сильно, я новичок в C++ L>Пиши на дельфях, там вроде тоже можно ISAPI клепать.
А что толку, здесь нужно разбираться в ISAPI, инструмент вряд-ли поможет.
Да и если бы на дельфи писалось, то спрашивал бы в форуме по дельфям
Здравствуйте, ibnTeo, Вы писали:
L>>Да легко. Только к 404 это имеет мало отношения. На этапе мапинга url'я ни ты, ни сервер не знаете, существует ли запрашиваемый ресурс. T>Может для вас это легко, подскажите хоть куда копать.
Почитать описание HTTPFilterProc в MSDN. Нотификация SF_NOTIFY_URL_MAP. Понять, что если хочется ремапить на что-нибудь отличное от статических страниц, то она не подходит. Прочитать про SF_NOTIFY_PREPROC_HEADERS и все, что с ней связано.
T>Сейчас в доке роюсь, видимо что-то связанное с pCtxt->ServerSupportFunction(); T>Хотя вряд-ли. Как бы подменить входящие данные...
Нет, ServerSupportFunction к вопросу перезаписи url'ей никак не относится. Хотя, она тоже может понадобиться.
T>>>P.S. не смейтесь сильно, я новичок в C++ L>>Пиши на дельфях, там вроде тоже можно ISAPI клепать. T>А что толку, здесь нужно разбираться в ISAPI, инструмент вряд-ли поможет. T>Да и если бы на дельфи писалось, то спрашивал бы в форуме по дельфям
Тогда нужно говорить, что новичек в ISAPI, а не в C++.
Что-ты написать-то хочешь, если не секрет? А то может это уже давно написали.
L>>>Да легко. Только к 404 это имеет мало отношения. На этапе мапинга url'я ни ты, ни сервер не знаете, существует ли запрашиваемый ресурс. T>>Может для вас это легко, подскажите хоть куда копать.
L>Почитать описание HTTPFilterProc в MSDN. Нотификация SF_NOTIFY_URL_MAP. Понять, что если хочется ремапить на что-нибудь отличное от статических страниц, то она не подходит. Прочитать про SF_NOTIFY_PREPROC_HEADERS и все, что с ней связано.
Спасибо большое, то что надо, все получилось
T>>Сейчас в доке роюсь, видимо что-то связанное с pCtxt->ServerSupportFunction(); T>>Хотя вряд-ли. Как бы подменить входящие данные...
L>Нет, ServerSupportFunction к вопросу перезаписи url'ей никак не относится. Хотя, она тоже может понадобиться.
T>>>>P.S. не смейтесь сильно, я новичок в C++ L>>>Пиши на дельфях, там вроде тоже можно ISAPI клепать. T>>А что толку, здесь нужно разбираться в ISAPI, инструмент вряд-ли поможет. T>>Да и если бы на дельфи писалось, то спрашивал бы в форуме по дельфям
L>Тогда нужно говорить, что новичек в ISAPI, а не в C++.
Одно другому не мешает, и уж если я чайник в C++, то с огромной вероятностью заодно и в ISAPI
L>Что-ты написать-то хочешь, если не секрет? А то может это уже давно написали.
Простой rewriter, но чтобы POST-заросы поддерживал. Если в IIS настроить обработку 404 на скрипт, то вообще обработать POST-запрос будет нереально.
Здравствуйте, ibnTeo, Вы писали:
L>>Что-ты написать-то хочешь, если не секрет? А то может это уже давно написали. T>Простой rewriter, но чтобы POST-заросы поддерживал. Если в IIS настроить обработку 404 на скрипт, то вообще обработать POST-запрос будет нереально.
T>DWORD CRewriterFilter::OnPreprocHeaders(CHttpFilterContext *pCtxt, PHTTP_FILTER_PREPROC_HEADERS pHeaders) T>{ T> CHAR * url="/rewrite.asp"; T> BOOL res=pHeaders->SetHeader((HTTP_FILTER_CONTEXT*) &pCtxt, "URL", url); T> return SF_STATUS_REQ_NEXT_NOTIFICATION; T>}
T>В итоге исходный URL получаем в HTTP_X_REWRITE_URL
Велосипед изобретаешь. Посмотри наш ISAPI_Rewrite. В нем разве что только проверки файла нет.
T>POST данные на месте T>Надо еще проверку файла прикурить, чтоб зазря не реврайтить.
Довольно гнилое это дело. Как ты будешь обрабатывать запросы к uri типа '/', '/folder/' и т.п.? Или еще почище — запросы, которые резолвятся через script map'ы с отсутсвием проверки на существование файла?