-1

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

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

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

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

编辑:
也许我对自己的解释不够好。
我有以下 RewriteRule

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

由于 products 是一个文件夹,它会将我的所有内容重定向到redirect.php
,它不会将我重定向到redirect.php,这就是问题所在。

4

2 回答 2

2

如果您有一个具有此名称的目录,则 apache 无法找到具有该名称的文件。

要关闭目录列表,请使用Options指令

Options -Indexes

这将防止列出目录内容。但是错误信息不是 404 页面,而是 403 Forbidden。

此外,您必须关闭对索引文件的查找

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 文件。

如果您想要重定向而不仅仅是重写,则必须R向 RewriteRule 添加一个标志

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]
于 2013-03-09T20:51:09.047 回答
0

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

于 2013-03-09T20:40:18.600 回答