.htaccess中的Multiviews选项究竟是什么?

tsm1rwdh  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(145)

我一直在努力与访问规则,需要重写一段URL添加一个路径。

RewriteRule ^(configuration/.+)$ application-server/$1 [L,NC,R=301,NE]

这个规则导致我的Joomla网站上只有一个空白页面,没有错误日志或消息。奇怪的是,所有其他规则我都完美地工作:

RewriteRule ^(log/.+)$ application-server/$1 [L,NC,R=301,NE]
RewriteRule ^(monitor/.+)$ application-server/$1 [L,NC,R=301,NE]

最后,我在一个论坛上发现了一个使用以下选项的建议:

Options -Multiviews

这实际上解决了这个问题,但是我想知道当使用这个选项时,是否会对其他规则产生任何副作用。

2w3kk1z5

2w3kk1z51#

这是关于Apache内容协商的。
MultiViews搜索是服务器进行隐式文件名模式匹配并从结果中进行选择的地方。
例如,如果你在根文件夹中有一个名为configuration.php(或其他扩展名)的文件,并且你在htaccess中为一个名为configuration/的虚拟文件夹设置了一个规则,那么你的规则就会有问题,因为服务器会自动选择configuration.php(如果启用了MultiViews,这是大多数情况下的情况)。
如果你想禁用这种行为,你只需要在你的htaccess中添加这个
Options -MultiViews
这样,您的规则现在将被评估,因为内容协商已禁用。

编辑

在某些共享主机上,negotiation 模块可能没有启用。这将给你给予500错误。为了避免这个错误,你可以在默认情况下将指令封装在IfModule块中。

<IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

相关问题