将 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文档中,自动索引页面的列宽配置不可用。从源代码编译将是进行此更改的唯一方法。
一种替代方法是使用脚本语言(例如php
、ruby
或python
)来为您执行目录列表。
好处包括:
- 通过 CSS、JavaScript 等完全可定制
- 对文件列表的精细控制
注意事项:
- 需要一个计算机图形图像处理例如
php-fpm
或passenger
- 需要更多配置
答案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 来使用它而不是返回的名称