当路径中包含“index”时,Apache 会出现 404 错误

当路径中包含“index”时,Apache 会出现 404 错误

我长期遇到 mod_rewrite 和 1and1 共​​享主机的问题(希望共享主机不会让这个问题迁移到“sharedserverfault”)。重写规则的所有功能都运行正常 - 除非路径中包含“index”。然后我收到 Apache 404 错误。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

到目前为止相当标准,在大多数服务器上运行良好。在 1and1 的服务器上,如果索引是顶级“目录”,我会收到 404 错误。任何以“http://example.com/index' 将导致 404。

如果我将 index.php 复制到 bootstrap.php 并更改 .htaccess 文件以指向那里,并且删除index.php,它将会起作用。

但是,这使得更新服务器变得很麻烦 - 知道是什么 apache 设置导致了这种情况吗?显然我无法更改主配置文件,但我可以使用 .htaccess 文件覆盖设置。

答案1

找到答案这里

经过一番研究,解决方案是禁用 MultiViews。MultiViews 选项允许即使未加载扩展名也可以调用文件,因此 index 会查找任何名为 index 的文件,而不管其扩展名是什么。

因此解决方案是添加:

Options -MultiViews

到.htaccess 文件。

答案2

如果您命名一个文件index并将其放在根目录中,它会 404 还是加载该文件?我会尝试覆盖DirectoryIndex.htaccess 文件中的指令。那里的默认值通常是 index.html,但您的可能只是 index。

相关内容