我的网站的 .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
此目录的指令,这样它应该可以正常工作。
答案2
对我来说,这是由重定向路径中的符号链接引起的。