为什么此RewriteRule对.php以外的所有扩展都有效?

时间:2019-01-05 15:02:24

标签: .htaccess apache2

这个我用来练习.htaccess文件的简单RewriteRule几乎总是可以工作:

RewriteEngine on
RewriteRule ^.*$ test.html

当我拥有文件flowers.html并使用http://localhost/flowers时,我被重定向到test.html,但是当我将flowers.html重命名为flowers.php时得到了404信息为The requested URL /flowers was not found on this server的页面。有谁知道是什么原因造成的?

编辑: 当我创建一个名为flowers的空文件时,它会正确地重定向到test.html。这是怎么回事?

1 个答案:

答案 0 :(得分:0)

这听起来与MultiViews冲突,因此请尝试在.htaccess文件的顶部添加以下内容以禁用MultiViews

Options -MultiViews

默认情况下未启用MultiViews,所以也许您的服务器配置中已启用?

启用MultiViews(mod_negotiation的一部分)后,对/flowers(无扩展名)的请求将导致Apache通过尝试各种文件扩展名来搜索适当的文件以返回(基于mime类型)在该目录中找到。这是通过运行mod_rewrite之前的内部子请求来实现的。

但是,尚不清楚如果没有其他指令,在您的情况下这将是一个问题吗?由于您的指令只是将一切重写为test.html(应该包括所有子请求)。 (我无法在我的Apache 2.4测试服务器上重现此行为-因此,我最初的疑问是。)