.htaccess - .htaccess 中的多 View 选项到底有什么作用?

标签 .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

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

最佳答案

这是关于 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/

相关文章:

apache - .htaccess 相同的 url,带或不带/

php - 在 .htaccess 文件中操作 PHP 响应的 header ?

regex - 具有单个参数的 htaccess 重写规则

.htaccess - 301 将整个网站重定向到单个页面

php - 非常简单的 RewriteRule 不起作用

apache - 简单的 .htaccess 子域重写

Apache ProxyPassReverse 未正确重写 Location header

php - Htaccess 不适用于 Mamp

php - 通过虚拟主机托管时如何运行 Laravel 应用程序?

apache - 使用 .htaccess 控制 CakePHP 的重定向