在 CentOS 上通过 Apache 设置 301 重定向,常见做法有几种,下面按使用场景给你最实用的配置方式(适用于 CentOS 7 / 8 / Stream,Apache 2.4)。
301 重定向依赖 mod_alias 或 mod_rewrite,一般默认已启用。
httpd -M | grep alias
httpd -M | grep rewrite
如果没有启用:
vi /etc/httpd/conf/httpd.conf
确保以下行未被注释:
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
Redirect(最简单,推荐)<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect 301 / https://example.com/
</VirtualHost>
✅ 特点:
<VirtualHost *:80>
ServerName example.com
Redirect 301 / http://www.example.com/
</VirtualHost>
.htaccess(适合虚拟主机).htaccess<Directory "/var/www/html">
AllowOverride All
</Directory>
.htaccessvi /var/www/html/.htaccess
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]
<VirtualHost *:80>
ServerName example.com
RewriteEngine On
RewriteRule ^(.*)$ https://example.com$1 [L,R=301]
</VirtualHost>
systemctl restart httpd
或:
systemctl reload httpd
curl -I http://example.com
应看到:
HTTP/1.1 301 Moved Permanently
Location: https://example.com/
❌ 重定向循环
✅ 检查 HTTPS 虚拟主机是否又跳回 HTTP
❌ .htaccess 无效
✅ 确认 AllowOverride All
❌ SELinux 干扰(少见)
setenforce 0 # 临时测试
你可以直接告诉我:
我可以给你 完全匹配你环境的配置文件。