列出目录内容并ls -l
显示以下输出:
total 12
drwxr-xr-x 3 root root 4096 Dec 11 16:38 2.3
drwxr-xr-x 5 root root 4096 Dec 11 16:38 2.4
drwxr-xr-x 2 root root 4096 Dec 11 16:38 archive
lrwxrwxrwx 1 root root 10 Dec 11 16:38 current -> 2.4/2.4.1/
lrwxrwxrwx 1 root root 10 Dec 11 16:38 next -> 2.4/2.4.2/
lrwxrwxrwx 1 root root 10 Dec 11 16:38 previous -> 2.4/2.4.0/
注意它如何显示符号链接及其各自的目标。
我需要知道是否有办法在 apache 目录浏览中获得相同的行为。
如果像我怀疑的那样,apache 不具备这种能力,那么是否有应用程序(FLOSS)可以提供这种行为?
答案1
我在持续交付管道的背景下寻找这个问题的解决方案。在二进制存储库管理中,版本在各个阶段之间以这种方式演变:beta -> rc -> stable。
我使用 Apache 2.2 从任何服务器访问二进制文件。我决定使用 apache 索引描述字段。
这是我的设置:
1)在虚拟主机配置文件中添加花式索引(即/etc/apache2/site-available/my-vhost)
<VirtualHost *: 80 >
...
DocumentRoot /path/to/root
IndexOptions FancyIndexing
...
</ VirtualHost>
2)在根目录(path/to/root)创建一个包含符号链接的.htaccess 文件。
# $version $lifecycle
AddDescription "2.10.0.5" beta
AddDescription "2.10.0.4" rc
AddDescription "2.9.0.9" stable
3)然后使用 SSH + sed 替换“ infile ”版本号:以下是测试版的示例,
ssh user@server "cd /path/to/root; sed -i 's/AddDescription.*$lifecycle$/AddDescription \"$version\" $lifecycle/g' .htaccess" && {
echo "Success."
} || {
echo "Failed.";
}
当然,这需要一些脚本,但这个解决方案对我来说足够动态。.htaccess 被 Apache 动态考虑在内。
符号链接的目标打印在描述列下。
希望这有帮助。
答案2
您可以在表中的“描述”字段中指明链接指向的内容。
我编写了一个 shell 脚本(GPL v3),它可以帮助您.htaccess
使用适当的AddDescription
行生成文件:
#!/bin/bash
# vi: et sts=4 sw=4 ts=4
# Usage: make-descriptions [DIR]...
# By default, adds a .htaccess file to '.'
set -e
shopt -s nullglob
if [[ $# -gt 0 ]]; then
DIRS=("$@")
else
DIRS=(.)
fi
escape() {
printf '%s\n' \
"${1//'&'/'&'}"
}
quote() {
printf '"%s"\n' \
"${1//'"'/'\"'}"
}
for DIR in "${DIRS[@]}"; do
HTACCESS=$DIR/.htaccess
printf 'IndexOptions -SuppressDescription\n' \
> "$HTACCESS"
for FN in "$DIR"/*; do
if [[ -L $FN ]]; then
TGT=$(readlink -- "$FN")
DESC=$(
printf '→ <a href=%s><tt>%s</tt></a>' \
"$(quote "$(escape "$TGT")")" \
"$(escape "$TGT")"
)
printf 'AddDescription %s %s\n' \
"$(quote "$DESC")" \
"$(quote "$(basename -- "$FN")")" \
>> "$HTACCESS"
fi
done
done
答案3
使用 mod_autoindex 选项应该可以实现这一点。
查看选项IndexOptions
并IndexStyleSheet
这里。