我一直在努力解决需要重写一段 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
这实际上解决了问题,但是我想知道使用此选项时是否会对其他规则产生任何副作用。
最佳答案
这是关于 Apache 内容协商的。
MultiViews
搜索是服务器进行隐式文件名模式匹配,并从结果中进行选择的位置。
例如,如果根文件夹中有一个名为 configuration.php
(或其他扩展名)的文件,并且您在 htaccess 中为名为 configuration/< 的虚拟文件夹设置了规则
那么你的规则就会有问题,因为服务器会自动选择 configuration.php
(如果启用了 MultiViews
,大多数时候都是这种情况)。
如果您想禁用该行为,您只需将其添加到您的 htaccess
选项-多 View
这样,您的规则就会被评估,因为内容协商已被禁用。
编辑
在某些共享主机上,协商模块可能未启用。这会给你一个 500 错误。为了避免此错误,默认情况下,您可以将该指令封装在 IfModule
block 中。
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
关于.htaccess - .htaccess 中的多 View 选项到底有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25423141/