在 CentOS 上 Apache 重定向失败 是很常见的问题,通常不是 Apache 本身“不会重定向”,而是配置没生效或被其他因素拦截。下面按最常见原因给你排查清单。
mod_rewriteApache 重定向(尤其是 .htaccess 里的 RewriteRule)依赖该模块。
检查是否启用:
httpd -M | grep rewrite
如果没有:
sudo yum install mod_rewrite
sudo systemctl restart httpd
.htaccess 未允许使用即使写了 .htaccess,Apache 也可能忽略。
检查虚拟主机配置:
<Directory "/var/www/html">
AllowOverride All
</Directory>
修改后必须:
sudo systemctl restart httpd
RewriteEngine On 必须存在<VirtualHost> 里更可靠示例:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
RewriteEngine On
RewriteRule ^/old$ /new [R=301,L]
</VirtualHost>
SELinux 可能阻止 Apache 执行某些操作。
临时测试:
setenforce 0
如果重定向好了,说明是 SELinux 问题:
sudo setsebool -P httpd_can_network_connect 1
确保 80 / 443 是开放的:
firewall-cmd --list-all
301 重定向 会被浏览器长期缓存
✅ 测试方式:
curl -I http://yourdomain.com/old
如果你访问的是 https,但重定向只写了 *:80,会失败。
解决:
*:443 里也写重定向# 1. 模块
httpd -M | grep rewrite
# 2. 配置语法
apachectl configtest
# 3. 重启
systemctl restart httpd
# 4. 测试
curl -I http://localhost/old
你可以直接贴:
httpd -v)我可以直接帮你改到可用 ✅