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

时间:2014-08-21 09:45:27

标签: .htaccess mod-rewrite

我一直在努力解决一个需要重写一个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

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

1 个答案:

答案 0 :(得分:54)

这是关于Apache内容协商的。

MultiViews搜索是服务器执行隐式文件名模式匹配的位置,并从结果中进行选择。

例如,如果您在根文件夹中有一个名为configuration.php(或其他扩展名)的文件,并且您在htaccess中为名为configuration/的虚拟文件夹设置了规则,那么您将拥有一个您的规则存在问题,因为服务器会自动选择configuration.php(如果启用MultiViews,则大多数情况下就是这种情况)。

如果要禁用该行为,只需将其添加到htaccess中即可 Options -MultiViews

这样,现在将评估您的规则,因为禁用了内容协商。

修改

在某些共享主机上,可能未启用协商模块。这会给你一个500错误。为避免此错误,您可以默认将指令封装在IfModule块中。

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