2011-10-17 35 views
1

我知道這一定是圍繞.htaccess或php.ini。查看任何文件夾時使PHP運行文件

如果一個網站訪問者查看任何文件夾我想自動運行一個腳本列出其中的文件(file_read.php)。

但我只想要file_read.php在我的根文件夾中。

有人能指點我嗎?

謝謝。

+1

如何'file_read.php'獲得文件夾的名稱看? –

回答

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 - note t他結束了斜線,沒有輸入http://server.com/directory(沒有斜線)被重定向到http://server.com/directory/file_read.php?dirpath=directory之類的東西,這不完全是我們想要的。
  4. RewriteRule ^$ file_read.php?dirpath=/ - 添加尾部斜槓上述規則後,目錄列表停止根目錄(http://server.com/)工作,所以這條線修復它
7

的.htaccess:

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

...或者這可能比我的更好。 +1。 – DaveRandom

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

每一個請求,其中所述路徑的最後一個字符是一個/得到file_read.php,並請路徑將提供給file_read.php$_GET['dir']

+0

有-d指令 - 「是目錄」 你的解決方案是錯誤的,因爲不存在404錯誤不存在的目錄 – Peter

+0

我知道,我忘了它,你絕對是更好的答案。 – DaveRandom

0

一種方法:只需刪除任何索引文件(例如index.php,index.html),並確保在.htaccess中沒有指向該文件夾中任何現有文件的DirectoryIndex指令。然後,當您查看該文件夾時,您將看到該文件夾​​中的所有文件。當然,這並不使用任何read_file.php腳本來完成;它只是讓目錄索引本身。

另一種方式:正如DaveRandom和Piotr Szymkowski所示,可以使用.htaccess將所有調用路由到所有目錄到read_file.php文件,並將當前目錄路徑作爲參數傳遞給該文件。然後,使用readdir()(請參閱php manual的使用),您可以列出其中的文件。

相關問題