这个我用来练习.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
。这是怎么回事?
答案 0 :(得分:0)
这听起来与MultiViews
冲突,因此请尝试在.htaccess
文件的顶部添加以下内容以禁用MultiViews
:
Options -MultiViews
默认情况下未启用MultiViews,所以也许您的服务器配置中已启用?
启用MultiViews(mod_negotiation的一部分)后,对/flowers
(无扩展名)的请求将导致Apache通过尝试各种文件扩展名来搜索适当的文件以返回(基于mime类型)在该目录中找到。这是通过运行mod_rewrite之前的内部子请求来实现的。
但是,尚不清楚如果没有其他指令,在您的情况下这将是一个问题吗?由于您的指令只是将一切重写为test.html
(应该包括所有子请求)。 (我无法在我的Apache 2.4测试服务器上重现此行为-因此,我最初的疑问是。)