0

我有以下内容lighttpd.conf

server.document-root = "/var/www/root" 
server.modules = ( "mod_scgi" )
server.port = 80

server.username = "www" 
server.groupname = "www"

mimetype.assign = (
  ".htm" => "text/html",
  ".html" => "text/html", 
  ".txt" => "text/plain",
  ".jpg" => "image/jpeg",
  ".png" => "image/png",
  ".myfile" => "text/html",
  ".zhtml" => "text/html"
)

index-file.names = ( "index.html" )

server.protocol-http11 = "enable"
server.error-handler-404 = "/error-404.php"

scgi.server = ( 
    "/infodesk" => ( "127.0.0.1" => ( "host" => "127.0.0.1", "port" => 9123, "fix-root-scriptname" => "enable", "check-local" => "disable" ) )
)

当请求http://192.168.0.42/infodesk我得到正确的 CGI 时。但是当请求例如http://192.168.0.42/InfoDesk我得到一个错误 404。

有没有办法将 mod_scgi 配置为不区分大小写?

我搜索了 lighttpd 文档和配置,但找不到任何东西。mod_scgi 的源代码可以阅读和理解,但是我没有找到 CGI-URI 被处理或比较的行。

感谢您的任何提示!

4

1 回答 1

0

好的,最后我解决了。

在 lighttpd-1.4.33 源代码中mod_scgi.c(从 2715 行开始):

/* check if extension matches */
for (k = 0; k < p->conf.exts->used; k++) {
    size_t ct_len;
    scgi_extension *ext = p->conf.exts->exts[k];

    if (ext->key->used == 0) continue;

    ct_len = ext->key->used - 1;

    if (s_len < ct_len) continue;

    /* check extension in the form "/scgi_pattern" */
    if (*(ext->key->ptr) == '/') {
        if (strncmp(fn->ptr, ext->key->ptr, ct_len) == 0) {
            extension = ext;
            break;
        }
    } else if (0 == strncmp(fn->ptr + s_len - ct_len, ext->key->ptr, ct_len)) {
        /* check extension in the form ".fcg" */
        extension = ext;
        break;
    }
}

将 a替换为strncmp()astrcasecmp()并删除 param ct_len

现在 CGI-URI 的http://192.168.0.42/infodesk处理方式与http://192.168.0.42/InfoDesk.

于 2015-04-29T14:27:37.803 回答