2013-03-09 282 views
-1

我有以下網址:myweb.com/products
我有我的主機名爲「產品」的目錄。
.htaccess如何忽略目錄?

當輸入上述url時,它會將我重定向到myweb.com/products/並列出目錄中的文件。
我該如何忽略/禁用它的工作方式,而不是使用名稱搜索目錄,它會嘗試查找具有該名稱的文件?

,所以當我進入myweb.com/products它會嘗試找到命名的產品文件,如果它不覺得它會發送到403頁

*這是一個例子。我有更多的目錄。

編輯:
也許我沒有解釋我的自我夠好。
我有以下重寫規則

RewriteRule ^(.*).php redirect.php [L,QSA] 

其重定向我的一切redirect.php
因爲產品是一個文件夾,它不重定向我redirect.php和多數民衆的問題..

回答

2

如果你有一個這個名字的目錄,apache找不到這個名字的文件。

要關閉目錄列表使用Options指令

Options -Indexes 

這將防止被列出的目錄內容。但是,錯誤消息不是404頁面,而是403 Forbidden。

此外,您必須關閉查找一個文件index

DirectoryIndex disabled 

否則,Apache將顯示一個index.html,index.php文件...文件,如果存在。

爲了防止斜線被添加到目錄的結束,請使用

DirectorySlash off 

要重寫具有相同名稱和.php文件附加,您可以使用此RewriteRule

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule (.+)/ $1.php 

這查看所請求的路徑是否爲目錄,如果是,則還檢查具有相同名稱的普通文件並將其作爲其擴展名.php。如果兩者均爲true,則重寫爲PHP文件。

如果你想重定向,而不是僅僅重寫,必須添加R標誌的重寫規則

RewriteRule (.+)/ $1.php [R,L] 

如果它應該重寫redirect.php而不是product.php,使用

RewriteRule (.+)/ redirect.php 

放在一起,這給了簡化

DirectorySlash off 

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule .+ redirect.php [L] 
+0

編輯我的問題到403.我不希望它是403錯誤..它應該去產品文件,而不是。在godaddy默認情況下它工作。現在我搬到了hostgator – Ron 2013-03-09 20:54:15

+0

@Ron如果已經有產品目錄,Apache應該如何找到產品文件?您不能擁有目錄*和*具有相同名稱的文件。 – 2013-03-09 20:55:33

+0

文件名是ofcourse products.php。 我會告訴你我在做什麼。我用rewriterule將所有內容重定向到redirect.php頁面。現在當試圖訪問myweb.com/products時,它應該將我重定向到redirect.php,因爲那是重寫過程,但是因爲產品是文件夾/目錄,所以它不能這樣做 – Ron 2013-03-09 20:57:56

0

寫index.php在myweb.com/products中篩選出你想要的名字,我猜。

+0

你是什麼意思?我只是將空白index.php放在產品中,但它仍將我重定向到myweb.com/products/。雖然它沒有列出文件..但那不是我想要的。 – Ron 2013-03-09 20:43:58