You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon AWS EC2中.htaccess配置失效问题排查求助

排查AWS EC2 Apache .htaccess重定向到404的问题

嘿,我之前在AWS EC2上踩过类似的坑,给你几个具体的排查步骤,应该能解决问题:

  • 先修复.htaccess里的语法错误!
    你写的RewriteCond %{REQUEST_FILENAME}!-d和RewriteCond %{REQUEST_FILENAME}!-f这两行有个致命的小细节:%{REQUEST_FILENAME}和!-d/!-f之间没有空格!Apache会把这一整串当成一个变量名,导致条件判断完全失效,规则逻辑直接乱掉。正确的写法应该是:

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php [QSA,L]
        ErrorDocument 404 /404.php
    </IfModule>
    

    这个空格问题太容易忽略了,本地环境可能对语法宽松,但EC2上的Apache版本通常会严格解析,这大概率是核心问题。

  • 确认Apache站点配置的AllowOverride设置
    AWS EC2默认的Apache配置(比如/etc/apache2/sites-available/000-default.conf)里,DocumentRoot对应的<Directory>块默认是AllowOverride None,这会直接忽略.htaccess里的所有规则。你需要修改这个配置:

    1. 打开配置文件:sudo nano /etc/apache2/sites-available/default(如果是新版Ubuntu,可能是000-default.conf)
    2. 找到DocumentRoot对应的<Directory>块,把AllowOverride None改成AllowOverride All(或者至少AllowOverride FileInfo,因为rewrite和ErrorDocument属于FileInfo规则):
      <Directory /var/www/html/>
          Options Indexes FollowSymLinks
          AllowOverride All
          Require all granted
      </Directory>
      
    3. 重启Apache生效:sudo systemctl restart apache2
  • 检查文件权限
    EC2上的Apache是以www-data用户运行的,确保你的网站文件(包括.htaccess、index.php、404.php)有正确的读写权限:

    1. 查看权限:ls -l /var/www/html/
    2. 如果权限不对,执行以下命令修复:
      sudo chown -R www-data:www-data /var/www/html/
      sudo chmod -R 755 /var/www/html/
      
  • 关闭MultiViews选项
    如果Apache开启了MultiViews,可能会干扰rewrite规则的执行。你可以在.htaccess的开头加上一行:

    Options -MultiViews
    

    或者在站点配置的<Directory>块里修改Options为Options Indexes FollowSymLinks -MultiViews

先试试第一个修复(加空格),这个最可能快速解决问题,然后再依次排查其他点。

内容的提问来源于stack exchange,提问作者BRAHMA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:36:17