【问题标题】:.htaccess 404 error when accessing file without extension访问没有扩展名的文件时出现 .htaccess 404 错误
【发布时间】:2019-09-26 00:59:51
【问题描述】:

我有这个简单的 htaccess 文件,它应该将每个请求带到 index.php?site=

问题是,当 htaccess 的文件夹中有一个文件(如 test.php)并且 url 是 domain.com/test 时,它会抛出一个标准的“404 not found”错误。

我该如何解决这个问题?

RewriteEngine On
RewriteBase /

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

谢谢!

【问题讨论】:

  • 它会抛出 什么 错误?还是我们打算猜测
  • 让我猜猜:“文件index.php不存在!”
  • 既然该文件存在,那么您肯定在此处张贴其中包含的重要部分...
  • 它出现在标题中。它给出了 404 Not Found 错误。 index.php 存在,有趣的是,如果 URL 是文件名,不带扩展名(不管文件名如何),它只会抛出错误。因此,如果我的根目录中有一个名为 login.php 的文件,我将无法访问 domain.com/login/,因为它会引发 404 错误。其他一切都很好。
  • 也许你有 another 内部重定向某处重写类似。由于您在这里测试%{REQUEST_FILENAME},它不会被其他重定向改变。问题是什么抛出了 404,这就是为什么我要求路由脚本的内容。如果引用的页面不存在,我可以想象它会抛出 404...

标签: .htaccess http-status-code-404


【解决方案1】:

对于 2019 年来到这里的人,我遇到了同样的问题。 原因是来自 Apache 的 mod 协商,当启用多视图时,其行为如下:

如果服务器收到对 /some/dir/foo 的请求并且 /some/dir/foo 不存在,则服务器读取目录以查找所有名为 foo.* 的文件,并有效地伪造一个类型映射,该映射命名所有这些文件,为它们分配相同的媒体类型和内容编码,如果客户端按名称要求其中之一。然后它选择最符合客户要求的匹配项,并返回该文档。

http://httpd.apache.org/docs/2.4/mod/mod_negotiation.html#multiviews

您可以在 .htaccess 中禁用多视图选项,如下所示:

Options -MultiViews

如果您已授予它,也可以在您的 apache 配置文件中:

  选项索引 FollowSymLinks
  允许覆盖所有
  要求所有授予
目录>

【讨论】:

    【解决方案2】:

    你要做的就是

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

    删除RewriteBase /

    否则,它将重定向到您的根文件夹。

    例如:

    但是当你添加 RewriteBase / 时它会重定向到 http://127.0.0.1/index.php?site=abc 所以删除它

    【讨论】:

    • 遗憾的是,这不是问题所在。即使删除了 RewriteBase,它仍然会出现 404。项目位于(用户的)根目录中,因此它是正确的。此外,如前所述,它在没有具有该名称的文件时有效。 domain.com/test 有效,因为没有 test.EXTENSION 文件。但是 domain.com/login 不起作用,因为在同一个文件夹中有一个 login.php 。我的意思是我可以将文件移动到不同的目录,但这不应该是必需的,对吧?我想了解导致此“错误”的原因
    • @KevinLienkamp,我在主机中检查了它,发现它对我有用。这是我在这里回答的唯一原因。我认为这可能对他有用。谢谢你的意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多