2013-03-09 276 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