Url rewriting 在G-WAN上为.JPG重写URL

Url rewriting 在G-WAN上为.JPG重写URL,url-rewriting,g-wan,Url Rewriting,G Wan,我正在测试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,

我正在测试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文件,上面写着justerror404,没有处理程序的任何细节


感谢advance对您的支持

您必须使用G-WAN
连接处理程序
,才能使用:

  • 简单的重写:本页末尾给出了一个示例
或者

  • 如果您的目标是更通用的重写方案,则使用
    regex
    库(libc提供regex调用)。下面是一个例子,解释如下,由《Linux公报》中的“C中的正则表达式”提供
这也可以成为一个
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;
}
//----------------------------------------------------------------------------
//init()将初始化数据结构、加载文件等。
// ----------------------------------------------------------------------------
//如果失败,init()应该返回-1(例如分配内存)
int init(int argc,char*argv[]
{
//定义要在main()中通知的处理程序状态:
//枚举处理程序\u动作{
//HDL_INIT=0,
//HDL\u AFTER\u ACCEPT,//just AFTER ACCEPT(仅客户端IP地址设置)
//HDL_在_读取之后,//每次读取都完成,直到HTTP请求OK
//HDL\u在\u解析之前,//HTTP谓词/URI已验证,但HTTP头未验证
//解析后的HDL\u,//验证HTTP头,准备生成应答
//HDL_BEFORE_WRITE,//在生成回复之后,但在发送之前
//HDL_HTTP_错误,//当G-WAN将以HTTP错误进行回复时
//HDL_清理};
//
u32*状态=(u32*)获取环境(argv,美国处理程序状态);

*states=1感谢您的回复。我测试了开发人员页面,所以创建了c servlet blog.c(运行良好).在处理程序中,我创建了main.c,其中包括源代码或在main函数中重写。Gwan启动良好,但当我使用localhost进行测试时,出现了404错误。在Gwan启动时,我没有错误,并且在日志中,处理程序和csp加载良好。Regards404意味着找不到重写的结果。请尝试使用printf()显示它,以便您可以检查错误。此外,如果上面的答案是正确的,那么如果您通过单击其“投票”号码获得绿色勾号来接受它,它将帮助其他用户。我知道404是什么意思,但对我来说,gwan不识别我的代码中的重写url。那么,在文件夹处理程序的main.c中创建它是否正确?如何使用打印f(它不想启动服务器)和??在处理程序中?在servlet中?我严重迷路了…请检查您的处理程序(在/handlers下正确命名和复制)是否工作。查看/log/error.log文件(或在处理程序中使用printf())以查看重写的资源G-WAN正在尝试服务什么(并且找不到)。如果您无法使其正常工作,那么您也可以获得个性化支持,如果您成为注册用户,还可以将您的源代码发送给我们以供审阅。我的处理程序在路径/0.0.0.0_80/#0.0.0/handlers中称为url_wr.c。该脚本与示例中的脚本完全相同:我创建了一个servlet博客,它是hello.c的副本。在error.log中,我只有404 e错误。在gwan.log中,没有写入我的处理程序已加载。感谢您的帮助