我正在测试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放在每个函数中,它将不起作用。
servlet bloc.c运行良好。

我还尝试将代码放在handlers / main.c和gwan目录的根目录中。

我只有该站点的error.log文件,上面写着error404,没有处理程序的任何详细信息。

预先感谢您的支持

最佳答案

您必须使用G-WAN connection handler才能使用:

  • 简单重写:在developers页面末尾给出一个示例

  • 要么,
  • 一个regex库(libc提供了正则表达式调用),如果您针对的是更通用的重写方案。这是一个example in C,解释是there,由“Linux Gazette”提供的“C中的Regular Expressions”表示感谢。

  • 也可以通过servlet来实现,但是随后您将不得不触发重定向(除非将资源明确地放置到缓存中)。如果可以接受,那么v3.10 +将允许您使用C#,PHP,Python等进行操作。

    按照问题中发布的代码进行UPDATE:

    您的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等)。

    09-25 21:29