apache下通过.htaccess实现301重定向:整站域名统一用rewritecond匹配http_host,单页迁移用rewriterule精确匹配路径,带参url需用rewritecond捕获query_string,务必验证状态码为301、避免循环跳转与规则冲突。

网站改版后旧URL失效,必须用301重定向把流量和权重平稳过渡到新地址,Apache下主要靠 .htaccess 或服务器配置文件实现,关键在规则写准、测试到位、避免循环跳转。
整站域名统一(如 a.com → www.a.com)
这是最常见需求,防止权重分散。把以下代码放入网站根目录的 .htaccess 文件中:
RewriteEngine On<br>RewriteCond %{HTTP_HOST} ^a\.com [NC]<br>RewriteRule ^(.*)$ http://www.a.com/$1 [R=301,L]注意:
• %{HTTP_HOST} 匹配的是访问时输入的域名,不带协议;
• [NC] 表示不区分大小写;
• $1 是捕获原路径,保证 a.com/about.html 跳成 www.a.com/about.html,不是只跳首页;
• 如果你希望反过来(www 去掉),把条件改成 !^a\.com$ 即可。
单页或目录级迁移(如 /old-page → /new-page)
适用于内容结构调整、栏目重命名等场景。规则要写在根目录或对应子目录的 .htaccess 中:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
RewriteEngine On<br>RewriteRule ^old-page/?$ /new-page [R=301,L]<br>RewriteRule ^products/(.*)$ /shop/$1 [R=301,L]
说明:
• 第一行匹配精确路径 /old-page 或 /old-page/;
• 第二行是通配迁移,products/category.html 会变成 shop/category.html;
• 不要在目标地址末尾加 /(如 /new-page/),否则可能触发额外跳转;
• 若新地址是完整URL(含域名),需写成 http://www.a.com/new-page 并确保协议一致。
带参数的动态URL重写(如 ?id=123 → /item/123)
Apache 的 RewriteRule 默认不处理问号后的查询字符串(QUERY_STRING),必须单独用 RewriteCond 捕获:
RewriteEngine On<br>RewriteCond %{QUERY_STRING} ^id=(\d+)$<br>RewriteRule ^detail\.php$ /item/%1? [R=301,L]要点:
• %{QUERY_STRING} 提取参数值,用 %1 引用;
• 目标地址末尾加 ? 是为了清空原始参数,避免跳转后还带上 ?id=123;
• 如果新地址也要带参数(比如转给另一个系统),就不用结尾问号,改写成 /item/%1?src=old。
验证与避坑提醒
设置完别急着上线,务必检查:
• 用浏览器开发者工具的 Network 面板确认返回状态码是 301,不是 302 或 200;
• 测试各种访问形式:带/不带www、带/不带斜杠、含参数、大小写混合路径;
• 确保没有规则冲突——比如 WordPress 的 # BEGIN WordPress 区块内不要插自定义规则,应放在区块外;
• Apache 必须启用 mod_rewrite 模块,且虚拟主机允许 AllowOverride All,否则 .htaccess 不生效。










