【发布时间】:2011-12-09 14:30:47
【问题描述】:
我知道这一定是 .htaccess 或 php.ini 周围的东西。
如果网站访问者查看 ANY 文件夹,我想自动运行一个脚本,列出其中的文件 (file_read.php)。
但我只希望 file_read.php 位于我的根文件夹中。
有人可以指点我吗?
谢谢。
【问题讨论】:
-
file_read.php如何获取要读取的文件夹名称?
我知道这一定是 .htaccess 或 php.ini 周围的东西。
如果网站访问者查看 ANY 文件夹,我想自动运行一个脚本,列出其中的文件 (file_read.php)。
但我只希望 file_read.php 位于我的根文件夹中。
有人可以指点我吗?
谢谢。
【问题讨论】:
file_read.php如何获取要读取的文件夹名称?
.htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) file_read.php?dirpath=$1
【讨论】:
不久前我遇到了类似的问题,并以.htaccess 结束,如下所示:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}index.php !-f
RewriteCond %{REQUEST_FILENAME}index.html !-f
RewriteRule (.*/) file_read.php?dirpath=/$1 [L]
RewriteRule ^$ file_read.php?dirpath=/ [L]
</IfModule>
一些解释为什么会这样:
RewriteCond %{REQUEST_FILENAME} -d - 使其仅适用于目录RewriteCond %{REQUEST_FILENAME}index.php !-f - 不要列出包含索引文件的目录RewriteRule (.*/) file_read.php?dirpath=/$1 - 注意结尾的斜杠,没有它进入 http://server.com/directory(没有尾随斜杠)被重定向到 http://server.com/directory/file_read.php?dirpath=directory 之类的东西,这不是我们想要的。RewriteRule ^$ file_read.php?dirpath=/ - 在上面的规则中添加斜杠后,目录列表器停止为根目录工作 (http://server.com/) 所以这一行修复了它【讨论】:
RewriteEngine on
RewriteRule ^(.*)/$ file_read.php?dir=$1 [L]
路径的最后一个字符是/ 的每个请求都会获得file_read.php,并且请求的路径将可用于$_GET['dir'] 中的file_read.php。
【讨论】:
一种方法:只需删除任何索引文件(例如 index.php、index.html)并确保 .htaccess 中没有 DirectoryIndex 指令指向文件夹中的任何现有文件。然后,当您查看文件夹时,您将看到该文件夹中的所有文件。当然,这并不使用任何 read_file.php 脚本来完成;它只是让目录自己索引。
另一种方式:正如 DaveRandom 和 Piotr Szymkowski 所展示的,您可以使用 .htaccess 将对所有目录的所有调用路由到 read_file.php 文件,将当前目录路径作为参数传递给该文件。然后,使用 readdir()(参见php manual 了解用法),您可以列出其中的文件。
【讨论】: