nginx:目录列表中的长文件名

nginx:目录列表中的长文件名

将 nginx/1.4.1 与 OpenBSD 5.4, 64 位一起使用:

在此输入图像描述

使用目录列表时,我们如何设置 nginx 显示完整文件名(或者至少显示文件名中的默认文件名)?

谷歌搜索只给了我这个:

http://forum.nginx.org/read.php?2,124400,167420#msg-167420
January 18, 2011 08:36PM
fagtron
I looked all over the net and wasn't able to find this answer anyway, so I looked into the nginx source files and it's very easy.

Simply modify the file located at [b]src/http/modules/ngx_http_autoindex_module.c[/b] and then compile.

Change these lines:

[b]#define NGX_HTTP_AUTOINDEX_PREALLOCATE 50

#define NGX_HTTP_AUTOINDEX_NAME_LEN 50[/b]

to whatever you want, such as:

[b]#define NGX_HTTP_AUTOINDEX_PREALLOCATE 100

#define NGX_HTTP_AUTOINDEX_NAME_LEN 100[/b]

And then compile and restart nginx. That's it !!!

问题: 那么没有其他办法可以重新编译吗?

答案1

您可以尝试 fancyindex 模块及其 fancyindex_name_length 参数来配置文件名长度。

答案2

根据ngx_http_autoindex_module文档中,自动索引页面的列宽配置不可用。从源代码编译将是进行此更改的唯一方法。

一种替代方法是使用脚本语言(例如phprubypython)来为您执行目录列表。

好处包括:

  • 通过 CSS、JavaScript 等完全可定制
  • 对文件列表的精细控制

注意事项:

答案3

由于似乎没有办法比从源代码编译 nginx 来实现这一点,这将是解决方法:

您可以使用以下脚本在当前文件夹中自动创建一个包含整个路径的 index.html 文件:

#!/bin/bash
# scriptname: /usr/local/sbin/directory-long-index.sh
# 
# the directory_root without slash at the end:
WEB=/var/www/
#reacheable url from inside the server:
URL=http://localhost

P=$(pwd|sed "s|$WEB/||")
echo "download $URL/$P/ to index.html"
curl "$URL/$P/" -o index.html
sed -i 's|href="\(.*\)".*</a>|style="display:inline-block;min-width:500px" href="\1">\1</a>|' index.html

在文件夹内只需调用:

source /usr/local/sbin/directory-long-index.sh

来源:https://gist.github.com/rubo77/c7a9434eb104c00bf8772b2278284360


其他解决方法将是从头开始创建一个简单的目录列表

for i in *; do echo '<a href="'$i'">'$i'</a><br>'>>index.html; done

答案4

您在链接的 href 中有全名,您可以执行一些 javascript 来使用它而不是返回的名称

相关内容