当存在相同名称的文件时,Htaccess将匹配目录

时间:2018-11-30 20:00:33

标签: apache .htaccess mod-rewrite

在我的Apache服务器中,我具有以下结构:

/www
    .htaccess
    api.php
    index.php

我的.htaccess是一个非常简单的文件,它将所有流量重定向到index.php:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]

我的index.php文件仅显示路径是什么:

<?php print_r($_REQUEST['path']); ?>

因此,当我尝试访问web.com/test时,会得到一个输出Array ( [path] => test )的网站。

但是,当我尝试访问web.com/indexweb.com/api时,它返回404错误。我检查了这种情况仅在尝试使用现有文件名访问路由时发生。我该如何防止这种行为?

1 个答案:

答案 0 :(得分:1)

结果是我在apache2.conf文件中启用了MultiViews。来自Apache docs

  

MultiViews的效果如下:如果服务器收到对/ some / dir / foo的请求,如果/ some / dir启用了MultiViews,并且/ some / dir / foo不存在,则服务器读取目录中查找名为foo。*的文件,并有效地伪造一个类型图,该类型图将所有这些文件命名为,并为它们分配与客户端要求的其中一个相同的媒体类型和内容编码按名称。

因此,我只需要向我的apache2.conf(服务器端)或项目的.htaccess(项目端)中添加Options -MultiViews即可防止该行为。