Ubuntu 22.04 Apache2根路径RewriteRule重定向失效求助
解决Apache2根路径重定向不触发的问题
问题原因
你的Rewrite规则RewriteRule ^$ https://www.google.com无法触发,核心原因是:
- 当访问
http://192.168.56.5时,浏览器实际请求的URI是/(根路径),而^$匹配的是空字符串(完全没有URI的场景,几乎不会在正常请求中出现),所以规则不匹配,直接跳过。 - 随后Apache的默认索引机制(由
DirectoryIndex控制)触发内部重定向,将/指向/index.html,此时URI变为/index.html,同样不匹配^$,因此也无法触发重定向。
修正方案(测试用:重定向到谷歌)
修改/etc/apache2/sites-available/000-default.conf中的Rewrite规则为:
LogLevel info ssl:warn rewrite:trace8 RewriteEngine On # 精准匹配根路径 / RewriteRule ^/$ https://www.google.com [R=302,L]
^/$:正则表达式精准匹配URI为/的请求[R=302]:标记为临时重定向(如果需要永久重定向可以用R=301)[L]:表示这是最后一条规则,匹配后不再处理后续Rewrite规则
最终需求配置(重定向到/someplace_else/index.html)
如果需要将根路径/重定向到/someplace_else/index.html,根据需求选择两种配置:
1. 外部重定向(浏览器地址栏显示目标URL)
LogLevel info ssl:warn rewrite:trace8 RewriteEngine On RewriteRule ^/$ /someplace_else/index.html [R=302,L]
2. 内部重写(浏览器地址栏保持为根路径,后台跳转到目标页面)
如果不想让用户看到URL变化,去掉R标记:
LogLevel info ssl:warn rewrite:trace8 RewriteEngine On RewriteRule ^/$ /someplace_else/index.html [L]
验证步骤
修改配置后,执行以下命令重启Apache2生效:
sudo systemctl restart apache2
再次访问http://192.168.56.5,即可触发预期的重定向/重写逻辑。
内容的提问来源于stack exchange,提问作者Dan MacNeil
相关产品推荐
相关产品推荐

