【问题标题】:execute script when directory listing by .htaccess通过 .htaccess 列出目录时执行脚本
【发布时间】:2020-08-08 14:22:50
【问题描述】:

我有一个启用了目录列表的 http 服务器 (apache HTTPD v2.4)。我将其配置为使用来自https://github.com/Vestride/fancy-index 的“fancy-index”,效果很好。但是,它的搜索功能并没有给出我想要的。

我想配置网络服务器,如果我转到http://mywebserver.com/someDir/*?list,它将以“文件,文件大小”格式返回 someDir 中所有文件的列表。

或者,如果我转到 http://mywebserver.com/someDir/essay2020*.txt?list ,我将获得所有essay2020*.txt 文件的自定义列表。或者某种形式的简单正则表达式:说“essay2020[0-2]*.txt”。

我可以编写一个 php/perl/python 脚本来读取目录并返回“文件,文件大小”列表。但是如何配置 .htaccess 来调用这个脚本呢?我必须使用'RewriteRule'吗?还是有什么特别的?

作为补充说明,我不仅限于修改 .htaccess。如果我可以通过修改 httpd.conf 来完成所有这些,我也愿意接受这个建议。

谢谢。

【问题讨论】:

  • 使用重写引擎这很好,恕我直言,但是您需要使用 RewriteCond 来检查查询字符串内容,RewriteRule 不能自己做到这一点。 httpd.conf 与 .htaccess 只是配置它的不同位置 - 如果你可以在前者中做到这一点,那将比使用 .htaccess 文件更可取。
  • 我可以使用 RewriteCond %{QUERY_STRING} list=,如果找到的话,写一个 RewriteRule 调用 '/search.php?var=$1' 其中 $1 是 % {REQUEST_URI}?如果是这样,我该怎么写?所以基本上,如果 URI 的结尾是 ?list,那么调用 'search.php?var=URI'.
  • 如果您只想匹配特定的查询字符串,则应为 ^list$。 (我认为问号不是其中的一部分。)是的,理论上它应该这样工作。
  • RewriteCond %{QUERY_STRING} ^list$, RewriteRule .* /search.php?var=%{REQUEST_URI}

标签: linux apache .htaccess httpd.conf


【解决方案1】:

CBroe 在评论中的回答做到了。只需修改 apache2.conf 文件即可添加:

        RewriteEngine on
        RewriteCond %{QUERY_STRING} ^list$
        RewriteRule .* /search.php?path=%{REQUEST_URI}

在我的 中,我现在可以将所有内容转发到 search.php,在那里我可以解析并做需要做的事情。所有不显示 search.php 的存在。谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-05
    • 2020-10-28
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多