在 Web 目录列表 (apache) 中显示符号链接及其目标

在 Web 目录列表 (apache) 中显示符号链接及其目标

列出目录内容并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

您可以在表中的“描述”字段中指明链接指向的内容。

Apache mod_autoindex 文件部分列表的屏幕截图,其中“描述”列中指示了符号链接目标

我编写了一个 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//'&'/'&amp;'}"
}

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 '&rarr; <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 选项应该可以实现这一点。

查看选项IndexOptionsIndexStyleSheet 这里

相关内容