【发布时间】: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