.htaccess - 为什么这个 RewriteRule 对除 .php 之外的所有扩展都有效?
问题描述
我用来练习 .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
. 这里发生了什么?
解决方案
这听起来确实与 冲突MultiViews
,因此请尝试在文件顶部添加以下内容.htaccess
以禁用MultiViews
:
Options -MultiViews
MultiViews 默认情况下未启用,所以也许这已在您的服务器配置中启用?
当启用 MultiViews(mod_negotiation 的一部分)时,对/flowers
(无扩展名)的请求将导致 Apache 通过尝试在该目录中找到的文件的各种文件扩展名来搜索要返回的适当文件(基于 mime 类型)。这是在 mod_rewrite 运行之前通过内部子请求实现的。
但是,如果您没有其他指令,尚不清楚为什么在您的情况下这会是一个问题?由于您的指令只是将所有内容重写为test.html
(应包括任何子请求)。(我无法在我的 Apache 2.4 测试服务器上重现这种行为 - 因此我最初怀疑。)
推荐阅读
- android - 将数据作为意图结果传递
- spring - 使用spring boot无法获取html页面
- linux - 应用程序通过 cronjob 成功启动,但一段时间后停止。手动启动时没有此类问题
- intellij-idea - 如何禁用错误:idea javadoc 错误:预期标识符
- python - 在熊猫数据框的平面文件中插入缺失的日期
- sql - 如何在格式不同的字段上连接两个表
- c++ - 如何进行执行所有 Boost 单元测试的测试
- listview - 如何在页面末尾设置 ListView
- javascript - 为什么 shouldComponentUpdate() 中的 nextProps 和 this.props 是一样的?
- angular - 行上的 Mat-table 事件已添加