已解决 - .htaccess 在服务器上产生 404,但通过 htaccess 验证器

Posted

技术标签:

【中文标题】已解决 - .htaccess 在服务器上产生 404,但通过 htaccess 验证器【英文标题】:Resolved - .htaccess produces 404 on server, but passes htaccess validators 【发布时间】:2021-11-02 13:48:37 【问题描述】:

我很困惑为什么这不起作用。当我使用在线.htaccess 验证器时,一切看起来都很好。它按预期工作。但是,生产服务器上的同一 .htaccess 会得到 404 响应。

RewriteEngine On
RewriteBase /

RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^api/(.*)$ api/index.php?_REQUEST=$1 [NC,L]

000-default.conf

<Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
</Directory>

对于某些上下文。该站点使用子域。它在带有 Ubuntu 20.04.2 LTS、Apache2 2.4.41 和 PHP 7.4.3 的 AWS EC2 实例上运行

这个完全相同的配置在另一个实例上也可以正常工作,唯一的区别是子域。期望的结果:

subdomain.example/api/data/data 重写为 subdomain.example/api/index.php?Querystring

将数据/数据作为查询字符串发送。虽然我不是 .htaccess 专家,但远非如此,我很难理解为什么这不起作用并产生 404。

【问题讨论】:

感谢您阐明正确的流程。 【参考方案1】:

分辨率: 确保您没有在您尝试重写的实际目录中留下相同的 .htaccess 文件。在这种情况下,api/.删除错误的 .htaccess 文件并重新启动 apache 解决了该问题。

【讨论】:

感谢您的反馈。在子目录中简单地启用重写引擎(即RewriteEngine On)的效果是完全覆盖了父 mod_rewrite 指令。而^api/(.*)$/api/.htaccess 中使用时将不匹配。

以上是关于已解决 - .htaccess 在服务器上产生 404,但通过 htaccess 验证器的主要内容,如果未能解决你的问题,请参考以下文章

Apache 2.4.6 default.conf 格式已更改。无法运行 .htaccess

如何获得开放的光速 .htaccess 工作

如何在服务器的htaccess中更改php版本

服务器无法读取htaccess文件,拒绝访问是安全的

解决SQLServer中变更海量数据表结构时产生无法修改表. Timeout 时间已到. 在操作完成之前超时时间已过或服务器未响应.

解决SQLServer中变更海量数据表结构时产生无法修改表. Timeout 时间已到. 在操作完成之前超时时间已过或服务器未响应.