使用 nginx 自定义自动索引页面

使用 nginx 自定义自动索引页面

有没有办法在 nginx 中定义自己的自动索引页面?

我想将自己的 HTML 和 CSS 添加到生成的自动索引页面中。

答案1

使用 XSLT 可以自定义 autoindex 的 xml 输出xslt 模块

location / {
    autoindex on;
    autoindex_format xml;
    xslt_stylesheet /path/to/custom.xslt
}

这就是我在这个项目中所做的事情:ngx-superbindex

答案2

答案与吉巴特罗尼克:利用 xslt 的强大功能!查看此示例 xslt 文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>
        <h3>Dafshabbat</h3>
        <table border="0">
        <tr bgcolor="#9acd32">
            <th>name</th>
            <th>size</th>
            <th>date</th>
        </tr>
        <xsl:for-each select="list/*">
        <xsl:sort select="@mtime"/>

            <xsl:variable name="name">
                <xsl:value-of select="."/>
            </xsl:variable>
            <xsl:variable name="size">
                <xsl:if test="string-length(@size) &gt; 0">
                        <xsl:if test="number(@size) &gt; 0">
                            <xsl:choose>
                                    <xsl:when test="round(@size div 1024) &lt; 1"><xsl:value-of select="@size" /></xsl:when>
                                    <xsl:when test="round(@size div 1048576) &lt; 1"><xsl:value-of select="format-number((@size div 1024), '0.0')" />K</xsl:when>
                                    <xsl:otherwise><xsl:value-of select="format-number((@size div 1048576), '0.00')" />M</xsl:otherwise>
                            </xsl:choose>
                        </xsl:if>
                </xsl:if>
            </xsl:variable>
            <xsl:variable name="date">
                <xsl:value-of select="substring(@mtime,9,2)"/>-<xsl:value-of select="substring(@mtime,6,2)"/>-<xsl:value-of select="substring(@mtime,1,4)"/><xsl:text> </xsl:text>
                <xsl:value-of select="substring(@mtime,12,2)"/>:<xsl:value-of select="substring(@mtime,15,2)"/>:<xsl:value-of select="substring(@mtime,18,2)"/>
            </xsl:variable>

        <tr>
            <td><a href="{$name}"><xsl:value-of select="."/></a></td>
            <td align="right"><xsl:value-of select="$size"/></td>
            <td><xsl:value-of select="$date"/></td>
        </tr>

        </xsl:for-each>
        </table>
    </body>
    </html>
    </xsl:template>
</xsl:stylesheet>

我特别喜欢的是按日期排序的功能,这里定义:<xsl:sort select="@mtime"/>

与在 .htaccess 文件中添加几个指令相比,它肯定需要更多的努力来设置。xml 文件的编写和读取都很麻烦。但是,自定义潜力很大,非常值得拥有!

请参阅入门教程w3学校

答案3

事实证明,你可以使用http添加模块

我不敢说我​​完全理解它,但有一个存储库可以正是你想要的,因此您可以尝试从那里开始。

编辑(2019):

仔细研究之后,发现这实际上是一个相当简单的任务。

  • 创建一个隐藏文件夹,例如.assets,这样自动索引就不会显示它。
  • 在其中,创建一个 html 文件,其中包含您想要附加到网页的任何内容。
  • 然后只需添加add_after_body /.assets/my_html_file.html到您的 nginx 规则即可。ta-da!

请注意,根据文档,此模块不是默认编译的一部分。不过,我发现 ubuntu 上的 nginx 包中有它。

答案4

您也可以尝试 h5ai:

http://larsjung.de/h5ai/

它们提供了一个非常好的文件浏览界面。

相关内容