.htaccess如何忽略目录?

时间:2013-03-09 20:37:12

标签: apache .htaccess mod-rewrite

我有以下网址:myweb.com/products
我的主人有一个名为“产品”的目录。

输入上述网址时,会将我重定向到myweb.com/products/并列出目录中的文件。
如何忽略/禁用它的工作方式,所以不是用名称搜索目录,而是尝试查找具有该名称的文件?

因此,当我输入myweb.com/products时,它会尝试查找名为products的文件,如果找不到它会发送到403页

*这是一个例子。我有更多目录。

修改
也许我没有足够好地解释我的自我 我有以下RewriteRule

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

将重定向到redirect.php的所有内容重定向 因为产品是一个文件夹,它不会将我重定向到redirect.php,这就是问题..

2 个答案:

答案 0 :(得分: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为其扩展名的常规文件。如果两者都为真,则重写为PHP文件。

如果您想要重定向而不仅仅是重写,则必须向RewriteRule添加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]

答案 1 :(得分:0)

在myweb.com/products中写一个index.php来过滤掉你想要的名字,我猜。