apache rewriterule 配置301跳转核心是启用mod_rewrite、设allowoverride all、用rewriteengine on开启引擎、rewritecond匹配条件、rewriterule加[r=301,l]返回标准状态码,并通过$1或%{query_string}准确传递路径与参数,最后用curl -i验证响应头含“http/1.1 301 moved permanently”。
apache 用 rewriterule 配置 301 永久跳转,核心是启用重写引擎、写对匹配条件、返回标准 301 状态码,并确保路径和参数正确传递。它不是单纯“跳过去”,而是向浏览器和搜索引擎明确宣告“这里永久搬走了”,避免 seo 权重流失和用户看到 404。
确认 mod_rewrite 已启用且允许重写
没开模块或没授权,规则再准也无效:
- 检查 Apache 配置文件(/etc/apache2/apache2.conf 或 /etc/httpd/conf/httpd.conf),确认这行未被注释:
LoadModule rewrite_module modules/mod_rewrite.so - 找到对应站点的
块(通常在虚拟主机配置里),把 AllowOverride None 改成 AllowOverride All - 重启服务:sudo systemctl restart apache2(Ubuntu/Debian)或 sudo systemctl restart httpd(CentOS/RHEL)
域名级全站 301 跳转
适用于旧域名整体迁移到新域名,比如 old-site.com → new-site.com:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在虚拟主机配置(
内)或网站根目录的 .htaccess 中添加: - RewriteEngine On
- RewriteCond %{HTTP_HOST} ^(www\.)?old-site\.com$ [NC](同时匹配带 www 和不带 www)
- RewriteRule ^(.*)$ https://new-site.com$1 [R=301,L]($1 保留原始路径,如 /blog/abc → /blog/abc)
单页或路径级 301 跳转
适合页面改名、栏目调整等场景,更轻量、更精准:
- 如果只是固定地址映射(如 /old.html → /new.html),优先用原生 Redirect(无需开启 rewrite):
Redirect 301 "/old.html" "https://example.com/new.html" - 若需正则处理(如 /post/123-title.html → /article/123):
RewriteRule ^/post/(\d+)-.*\.html$ /article/$1 [R=301,L] - 要保留查询参数(如 ?utm_source=abc),加 ?%{QUERY_STRING}:
RewriteRule ^old-page$ /new-page?%{QUERY_STRING} [R=301,L]
验证是否真正生效
不能只看浏览器跳没跳,必须确认服务器返回的是 301 状态码:
- 用 curl 测试:curl -I http://old-site.com/some-path,响应头中应含 HTTP/1.1 301 Moved Permanently 和正确的 Location 字段
- 用在线工具(如 Redirect Checker)输入旧 URL,查看跳转链和状态码
- 注意:浏览器可能缓存 301,测试前清空缓存或用隐身窗口










