Apache旧域名全站301跳转核心是用RewriteEngine、RewriteCond和RewriteRule实现永久重定向,需启用mod_rewrite模块,在VirtualHost中配置匹配旧域名并跳转至新域名,保留路径且返回301状态码。

旧版网站永久跳转,核心是用 Apache 的 301 状态码明确告诉浏览器和搜索引擎“资源已永久迁移”,避免权重流失、404 错误和用户体验断层。配置方式取决于跳转范围——是全站域名级跳转,还是单页/路径级跳转,也取决于你是否有权限修改服务端配置(如虚拟主机文件)或只能使用 .htaccess。
全站域名跳转(推荐用于换域名)
适用于旧域名(如 old-site.com)整体迁移到新域名(如 https://new-site.com)。需确保 mod_rewrite 已启用,并在虚拟主机配置中添加:
- 在
<VirtualHost>块内(通常放在DocumentRoot后、<Directory>前)写入:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?old-site\.com$ [NC]
RewriteRule ^(.*)$ https://new-site.com$1 [R=301,L]-
[NC]表示不区分大小写,同时匹配old-site.com和www.old-site.com; -
$1保留原始请求路径,比如访问old-site.com/blog/abc会跳到https://new-site.com/blog/abc; -
[R=301,L]表示返回 301 状态码,且该规则为最后一条,不再执行后续重写。
路径级批量跳转(适合结构调整)
适用于目录改名、页面迁移等场景(如 /old/news/ → /articles/),推荐用独立文件管理,避免污染主配置:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 新建文件(如
/etc/apache2/redirects/legacy-rules.conf),内容可混合使用简单跳转与正则:
# 简单路径映射(无需 RewriteEngine) Redirect 301 "/old/about.html" "https://new-site.com/company" Redirect 301 "/old/contact.php" "https://new-site.com/contact" <h1>正则匹配(需 RewriteEngine On 在外层开启)</h1><p>RewriteRule "^/old/blog/(\d+)-(.<em>).html$" "<a href="https://www.php.cn/link/7308274b80c4b847eeb5cc471ab9c47d">https://www.php.cn/link/7308274b80c4b847eeb5cc471ab9c47d</a>" [R=301,L] RewriteRule "^/old/download/(.</em>)$" "<a href="https://www.php.cn/link/0d884ce69fdbffb9e485464226f5e3e4">https://www.php.cn/link/0d884ce69fdbffb9e485464226f5e3e4</a>" [R=301,L]
- 在站点配置的
<VirtualHost>中加入:Include /etc/apache2/redirects/legacy-rules.conf; - 重启 Apache 或重载配置:
sudo systemctl reload apache2(Ubuntu/Debian)。
仅用 .htaccess(共享主机或无 root 权限时)
把以下内容放入网站根目录的 .htaccess 文件(确保 AllowOverride All 已在虚拟主机中启用):
RewriteEngine On
RewriteBase /
<h1>示例:将 /old/ 下所有请求跳到新路径</h1><p>RewriteRule ^old/(.*)$ /new/$1 [R=301,L]</p><h1>示例:强制 www 跳转(非 www → www)</h1><p>RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule ^(.*)$ <a href="https://www.php.cn/link/e5f878155d6960493d788003691a609a">https://www.php.cn/link/e5f878155d6960493d788003691a609a</a> [R=301,L]- 注意:
RewriteBase /表示相对根目录,若网站在子目录(如/blog/),应改为RewriteBase /blog/; - 每次修改后建议清空浏览器缓存测试,因 301 会被强缓存;
- 上线前务必用
curl -I检查响应头是否含HTTP/1.1 301 Moved Permanently和正确Location。
关键检查点
配置生效前确认这三项:
-
mod_rewrite是否启用:运行a2enmod rewrite(Ubuntu/Debian)或检查httpd.conf中LoadModule rewrite_module是否未被注释; - 虚拟主机中是否允许重写:确认
<Directory>块内有AllowOverride All(对.htaccess)或直接在配置中写规则(更高效); - 语法是否正确:用
sudo apachectl configtest验证配置无误,避免重载失败。

















