3

G-WANサーバーをテストしていますが、書き換えルールを使用したいと思います。

apacheの場合のルールは次のとおりです。

RewriteRule ^(.+)-(.+)-(.+)-1.jpg$ imagesproduitnew/$3/$2.jpg [L]

私はハンドラーJPGでそれをやろうとしていますが、私は多くの困難を抱えています。

誰かがすでにそのようなことをしましたか?


私のハンドラーは、パス/0.0.0.0_80/#0.0.0.0/handlersでurl_wr.cと呼ばれます。スクリプトは次のとおりです。

int init(char *argv[], int argc);

int main(int argc, char *argv[])
{
   const long state = (long)argv[0];
   if(state == HDL_AFTER_READ)
   {
      xbuf_t *read_xbuf = (xbuf_t*)get_env(argv, READ_XBUF);
      xbuf_replfrto(read_xbuf, read_xbuf->ptr, read_xbuf->ptr + 16, "/blog", "/?blog");
   }
   return 255; // execute next connection step
}

int clean(char *argv[], int argc);

gwan.logでは、ロードされたurl_wr.cとは書き込まれません。各関数にprintfを入れると、機能しません。サーブレットbloc.cはうまく機能します。

また、コードをhandlers/main.cとgwanディレクトリのルートに配置してみました。

ハンドラーの詳細なしでerror404とだけ書かれているサイトのerror.logファイルしかありません。

よろしくお願いします

4

1 に答える 1

1

connection handler次のいずれかを使用するには、G-WANを使用する必要があります。

  • わかりやすい書き直し:開発者ページの最後に1つの例があります。

また、

  • regexより一般的な書き換えスキームを対象とする場合は、ライブラリ(libcは正規表現呼び出しを提供します)。これがCの例であり、説明は「LinuxGazette」の「 RegularExpressionsinC 」の好意によるものです。

これをROMにすることもできservletますが、その場合はリダイレクトをトリガーする必要があります(リソースが明示的にキャッシュに配置されていない場合)。これが許容できる場合、v3.10 +ではC#、PHP、Pythonなどで実行できます。


質問で公開されたコードに続く更新:

あなたのinit()呼び出しは空なので、main()呼び出されることはありません。代わりにこれを行う必要があります。

// ----------------------------------------------------------------------------
// init() will initialize your data structures, load your files, etc.
// ----------------------------------------------------------------------------
// init() should return -1 if failure (to allocate memory for example)
int init(int argc, char *argv[])
{
   // define which handler states we want to be notified in main():
   // enum HANDLER_ACT { 
   //  HDL_INIT = 0, 
   //  HDL_AFTER_ACCEPT, // just after accept (only client IP address setup)
   //  HDL_AFTER_READ,   // each time a read was done until HTTP request OK
   //  HDL_BEFORE_PARSE, // HTTP verb/URI validated but HTTP headers are not 
   //  HDL_AFTER_PARSE,  // HTTP headers validated, ready to build reply
   //  HDL_BEFORE_WRITE, // after a reply was built, but before it is sent
   //  HDL_HTTP_ERRORS,  // when G-WAN is going to reply with an HTTP error
   //  HDL_CLEANUP };
   //
   u32 *states = (u32*)get_env(argv, US_HANDLER_STATES);
   *states = 1 << HDL_AFTER_READ; // we assume "GET /hello" sent in one shot
   puts("init()");
   return 0;
}

connection handlersまた、名前が。であることを確認してmain.cください。対照的にcontent handlers、対象のファイル拡張子の名前(gif.c、html.cなど)を付けます。

于 2012-11-13T13:28:10.440 に答える