Server.Transfer в ISAPI
От: ibnTeo Россия http://ibnteo.klava.org/
Дата: 14.02.03 11:59
Оценка:
Как реализовать сабж в OnUrlMap?
При неправильном запросе (404) нужно переслать обработку на реальный скрипт, например это будет ASP (может быть что угодно, например SSI или что другое).
Сие вообще возможно?

14.02.03 17:21: Перенесено модератором из 'C/C++' — ПК
Re: Server.Transfer в ISAPI
От: Lexey Россия  
Дата: 14.02.03 12:04
Оценка:
Здравствуйте, ibnTeo, Вы писали:

T>Как реализовать сабж в OnUrlMap?


Полный аналог Server.Transfer никак.

T>При неправильном запросе (404) нужно переслать обработку на реальный скрипт, например это будет ASP (может быть что угодно, например SSI или что другое).


Неправильный запрос — это 400, а не 404.

T>Сие вообще возможно?


В ограниченных масштабах.
Re[2]: Server.Transfer в ISAPI
От: ibnTeo Россия http://ibnteo.klava.org/
Дата: 14.02.03 12:17
Оценка:
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;
}

P.S. не смейтесь сильно, я новичок в C++
Re[3]: Server.Transfer в ISAPI
От: Lexey Россия  
Дата: 14.02.03 12:22
Оценка:
Здравствуйте, 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 клепать.
Re[4]: Server.Transfer в ISAPI
От: ibnTeo Россия http://ibnteo.klava.org/
Дата: 14.02.03 12:39
Оценка:
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, инструмент вряд-ли поможет.
Да и если бы на дельфи писалось, то спрашивал бы в форуме по дельфям
Re[5]: Server.Transfer в ISAPI
От: Lexey Россия  
Дата: 14.02.03 13:16
Оценка:
Здравствуйте, 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++.
Что-ты написать-то хочешь, если не секрет? А то может это уже давно написали.
Re[6]: Server.Transfer в ISAPI
От: ibnTeo Россия http://ibnteo.klava.org/
Дата: 14.02.03 14:55
Оценка:
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-запрос будет нереально.

DWORD CRewriterFilter::OnPreprocHeaders(CHttpFilterContext *pCtxt, PHTTP_FILTER_PREPROC_HEADERS pHeaders)
{
CHAR * url="/rewrite.asp";
BOOL res=pHeaders->SetHeader((HTTP_FILTER_CONTEXT*) &pCtxt, "URL", url);
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}

В итоге исходный URL получаем в HTTP_X_REWRITE_URL
POST данные на месте
Надо еще проверку файла прикурить, чтоб зазря не реврайтить.
Re[7]: Server.Transfer в ISAPI
От: Lexey Россия  
Дата: 14.02.03 15:05
Оценка:
Здравствуйте, 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'ы с отсутсвием проверки на существование файла?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.