我知道这必须是.htaccess或php.ini。
如果网站访问者查看 ANY 文件夹,我想自动运行列出其中文件的脚本(file_read.php)。
但我只希望file_read.php在我的根文件夹中。
有人可以指点我吗?
感谢。
答案 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>
为什么会这样解释:
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=/
- 在上面的规则中添加尾部斜杠之后,目录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了解用法),您可以列出其中的文件。