从 Apache 2.4 迁移到 Apache 2.2 时出现 mod_rewrite 错误

从 Apache 2.4 迁移到 Apache 2.2 时出现 mod_rewrite 错误

我的网站的 .htaccess 文件中存储了一系列重写规则,重写 URLhttp://example.com/cloud/something如下http://example.com/cloud/index.php?page=something

当我在装有 Apache 2.4.7 的服务器上时,这些规则运行良好,但是现在我在装有 Apache 2.2.22(不是我的选择)的服务器上工作,由于某种原因,这些规则不起作用。

htaccess 文件:

RewriteEngine On
RewriteBase /cloud/

RewriteCond %{THE_REQUEST} \ /+cloud/(?:index\.php|)\?page=([^&]+)/(&|\ |$)
RewriteRule ^ %1/ [L,R]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [L,QSA]

每当我尝试使用其明确的 URL(index.php?page=something)访问页面时,它都可以正常工作,但是尝试快捷方式会导致 404 页面未找到响应。

我检查了 Apache 的 error.log 文件,发现每次我尝试访问其中一个 URL 时都会出现新的错误:

[error] [client 10.0.0.90] Negotiation: discovered file(s) matching request: /var/www/cloud/settings (None could be negotiated)

可能存在什么问题?为什么它不起作用?

答案1

此错误似乎是由 引起的MultiViews。请检查您的中央 Apache 配置并删除MultiViews此目录的指令,这样它应该可以正常工作。

来源:http://www.bennadel.com/blog/2218-negotiation-discovered-file-s-matching-request-none-could-be-negotiated.htm

答案2

对我来说,这是由重定向路径中的符号链接引起的。

相关内容