我正在测试 G-WAN 服务器,我想使用重写规则。
使用阿帕奇,规则是:
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目录的根目录中。
我只有一个错误.log网站的文件,它只说 error404,没有任何处理程序的详细信息。
提前感谢您的支持
G-WAN connection handler
,才能使用:
- 一个普通的重写:在开发人员页面的末尾给出了一个例子,
或
- 一个
regex
库(libc 提供正则表达式调用),如果您的目标是更通用的重写方案。这里有一个 C 语言的例子,解释在那里,由"Linux Gazette"中的"C 中的正则表达式"提供。
这也可以使 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等)。