查看任何文件夹时使PHP运行文件

时间:2011-10-17 20:43:35

标签: php .htaccess directory

我知道这必须是.htaccess或php.ini。

如果网站访问者查看 ANY 文件夹,我想自动运行列出其中文件的脚本(file_read.php)。

但我只希望file_read.php在我的根文件夹中。

有人可以指点我吗?

感谢。

4 个答案:

答案 0 :(得分:7)

htaccess的:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule (.*) file_read.php?dirpath=$1

答案 1 :(得分:2)

不久前,我遇到了类似的问题,并以.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>

为什么会这样解释:

  1. RewriteCond %{REQUEST_FILENAME} -d - 使其仅适用于目录
  2. RewriteCond %{REQUEST_FILENAME}index.php !-f - 不列出包含索引文件的目录
  3. RewriteRule (.*/) file_read.php?dirpath=/$1 - 请注意结束斜杠,如果没有输入http://server.com/directory(没有尾随斜杠),则重定向到http://server.com/directory/file_read.php?dirpath=directory,而不是我们想要的。
  4. RewriteRule ^$ file_read.php?dirpath=/ - 在上面的规则中添加尾部斜杠之后,目录lister停止了对根目录(http://server.com/)的工作,所以此行修复了它

答案 2 :(得分:1)

RewriteEngine on
RewriteRule ^(.*)/$ file_read.php?dir=$1 [L]

路径的最后一个字符为/的每个请求都会获得file_read.php,请求的路径将可用于file_read.php中的$_GET['dir']

答案 3 :(得分:0)

一种方法:只需删除任何索引文件(例如index.php,index.html),并确保.htaccess中没有指向文件夹中任何现有文件的DirectoryIndex指令。然后,当您查看该文件夹时,您将看到该文件夹​​中的所有文件。当然,这不会使用任何read_file.php脚本来执行此操作;它只是让目录索引本身。

另一种方式:正如DaveRandom和Piotr Szymkowski所示,您可以使用.htaccess将所有目录的所有调用路由到read_file.php文件,并将当前目录路径作为参数传递给该文件。然后,使用 readdir()(请参阅php manual了解用法),您可以列出其中的文件。