Amazon AWS EC2中.htaccess配置失效问题排查求助
嘿,我之前在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里的所有规则。你需要修改这个配置:- 打开配置文件:
sudo nano /etc/apache2/sites-available/default(如果是新版Ubuntu,可能是000-default.conf) - 找到
DocumentRoot对应的<Directory>块,把AllowOverride None改成AllowOverride All(或者至少AllowOverride FileInfo,因为rewrite和ErrorDocument属于FileInfo规则):<Directory /var/www/html/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> - 重启Apache生效:
sudo systemctl restart apache2
- 打开配置文件:
检查文件权限
EC2上的Apache是以www-data用户运行的,确保你的网站文件(包括.htaccess、index.php、404.php)有正确的读写权限:- 查看权限:
ls -l /var/www/html/ - 如果权限不对,执行以下命令修复:
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

