Ubuntu 22.04下.htaccess的Rewrite Rule无法生效求助
检查站点根目录的Directory配置
你修改了全局/var/www/的AllowOverride All,但如果你的站点DocumentRoot是子目录(比如默认的/var/www/html,或者自定义的/var/www/your-site),需要单独给对应目录配置AllowOverride All。比如打开站点配置文件(/etc/apache2/sites-enabled/your-site.conf),确保有:<Directory /var/www/html/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>配置后重启Apache:
sudo systemctl restart apache2验证RewriteRule的匹配规则
你的规则^foobar/$仅匹配以foobar/结尾的请求(比如http://yourdomain/foobar/),如果访问的是http://yourdomain/foobar(不带末尾斜杠)则不会触发。可以修改规则兼容两种情况:RewriteEngine On RewriteRule ^foobar/?$ https://example.com/ [R=302,L]同时要确保没有其他
Redirect规则先处理了同一个路径,规则执行有顺序,先出现的规则会优先生效。启用Rewrite日志排查匹配过程
Apache 2.4已弃用旧的RewriteLog指令,可通过环境变量记录Rewrite日志。在站点配置文件中添加:CustomLog /var/log/apache2/rewrite.log "%{REWRITE_LOG}e" env=REWRITE_LOG然后在RewriteRule中添加日志标记:
RewriteEngine On RewriteRule ^foobar/$ https://example.com/ [R=302,L,E=REWRITE_LOG:Matched-Foobar-Rule]重启Apache后访问测试路径,查看
/var/log/apache2/rewrite.log,就能明确规则是否被触发、匹配是否成功。确认.htaccess文件被正确读取
先验证Apache是否加载了你的.htaccess:在文件中添加一行无效内容(比如TestInvalidDirective),然后访问站点。如果出现500错误,说明文件被读取;如果无报错,还是AllowOverride配置的问题。
同时确保文件权限正确:sudo chmod 644 /var/www/your-site/.htaccess sudo chown www-data:www-data /var/www/your-site/.htaccess清理Apache2.2兼容指令
你的apache.conf中混合了Apache2.2的Order allow,deny和allow from all,以及2.4的Require all granted,可能引发冲突。建议保留2.4的标准指令:<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>测试最简RewriteRule
先写一个无歧义的基础规则验证功能:RewriteEngine On RewriteRule ^test$ https://example.com [R=302,L]访问
http://yourdomain/test,如果能跳转说明Rewrite功能正常,问题出在之前的规则匹配逻辑;如果仍不跳转,重新检查mod_rewrite是否真的启用(执行sudo a2enmod rewrite再重启Apache)。
内容的提问来源于stack exchange,提问作者Joe Brown

