.htaccess 中的 301 重定向规则

301 重定向是 .htaccess 中最常见的配置之一。它将访客和搜索引擎从旧 URL 永久重定向到新 URL,在站点迁移、URL 重构或安全升级(HTTP → HTTPS)期间保留 SEO 排名并确保流畅的用户体验。

301 vs 302:有什么区别?

在深入了解规则之前,先了解应使用哪种重定向类型:

永久更改(HTTP→HTTPS、www→non-www、域名迁移、URL 重构)使用 301;A/B 测试或维护页面等临时情况使用 302。

修改前请务必备份您的 .htaccess 文件。单个语法错误可能导致整个网站出现 500 内部服务器错误。在 DirectAdmin 中,进入文件管理器 → public_html/.htaccess → 先下载一份备份。

规则 1:重定向单个 URL

最简单的重定向——将某个特定 URL 指向另一个。适用于重命名页面或文章时使用。

Redirect 301 /old-page.html https://asiagb.com/new-page.html

或使用 mod_rewrite(更灵活):

RewriteEngine On
RewriteRule ^old-page\.html$ /new-page.html [R=301,L]

规则 2:HTTP 转 HTTPS(强制 SSL)

将所有 HTTP 流量重定向到 HTTPS——安装 SSL 证书后确保安全和 SEO 排名的必要步骤。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

此规则检查 HTTPS 是否关闭,然后将请求改写为使用 HTTPS,同时保留完整的路径和查询字符串。

规则 3:www 转 non-www

将 www.yourdomain.com 重定向到 yourdomain.com,将域名权重集中到单一规范版本。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

%1 从上面的条件中捕获不含 www. 的域名部分。

规则 4:non-www 转 www

与上面相反——将 yourdomain.com 重定向到 www.yourdomain.com。请始终统一使用一种规范形式。

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

规则 5:重定向整个文件夹

将文件夹内所有页面重定向到新位置。适用于对网站结构进行重组后使用。

RewriteEngine On
RewriteRule ^old-blog/(.*)$ /new-blog/$1 [R=301,L]

(.*) 捕获组保留了文件路径,因此 /old-blog/post-1.html → /new-blog/post-1.html。

规则 6:完整域名迁移

将所有流量从旧域名重定向到新域名。适用于品牌更名或迁移到新域名时使用。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$ [NC]
RewriteRule ^(.*)$ https://newdomain.com/$1 [R=301,L]

将此规则放在 olddomain.com 的 .htaccess 文件中,可同时处理 www 和 non-www 两种形式。

规则 7:带查询字符串的重定向

重定向含有特定查询参数的 URL。适用于从查询字符串 URL 改为简洁 URL 之后使用。

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=123$
RewriteRule ^product\.php$ /product/widget-pro? [R=301,L]

目标地址末尾的 ? 会从重定向后的 URL 中移除原始查询字符串。

规则 8:HTTP + www 同时转为 HTTPS + non-www

最完整的重定向方案——处理所有四种组合(http/https × www/non-www),并强制使用规范版本。

RewriteEngine On
# Force HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
# Force non-www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

按顺序同时运行这两条规则。HTTPS 规则先触发,然后是 www 规则,覆盖所有四个入口。

测试您的重定向

添加重定向规则后,请务必验证其是否正常工作:

避免重定向链。如 A → B → C 的链式重定向会增加延迟并稀释链接权重。请始终直接重定向到最终目标:A → C。

.htaccess 常见错误

更多 .htaccess 重定向规则

除上述八个核心规则外,实际迁移中往往还需要一些变体。以下示例涵盖整理网站 URL 时最常遇到的情况——强制使用单一规范域名、统一尾部斜杠,以及将旧页面映射到新页面。复制后将域名和路径替换为您自己的即可。

一次性强制 HTTPS + non-www(规范域名)

如果希望所有请求无论来源如何都以 https://yourdomain.com 结束,可将所有条件合并为一条规则:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ https://yourdomain.com/$1 [R=301,L]

[OR] 标志在请求"不是 HTTPS"或"带有 www"时触发规则,因此所有四个入口(http/https × www/non-www)通过单次重定向合并为一个规范 URL——最大限度减少重定向链。

统一尾部斜杠(添加或移除)

为保持 URL 一致性,请选择您的 URL 是否以 / 结尾并在全站强制执行。为目录添加尾部斜杠:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R=301,L]

或者相反——移除尾部斜杠以保持 URL 简短:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]

只能使用其中一个——切勿同时使用,否则两者相互冲突会造成重定向循环。

旧页面到新页面(一对一映射)

当您重命名文章或重构某个 URL 时,进行一对一映射,确保旧页面不会失去排名:

Redirect 301 /blog/old-article /blog/new-article-slug
Redirect 301 /promo-2026.html /promotions.html

对于多个页面,使用 RedirectMatch 或逐行列出每个 Redirect 301,确保每个页面直接指向最终目标,而不经过中间跳转。

301 vs 302 vs 307:该如何选择

HTTP 有多种重定向状态码。最常用的三种是 301、302 和 307,每种都向浏览器和搜索引擎传递不同信息。选错可能损害 SEO 或破坏 POST 请求。

状态码 含义 传递链接权重 使用场景
301 永久移动 是(约90-99%) 站点迁移、强制 HTTPS、www/non-www 规范化、URL 变更
302 临时跳转 否 维护页面、A/B 测试、临时促销
307 临时重定向(保留请求方法) 否 需要保留 POST 方法的重定向(API、表单)

307 的关键区别在于浏览器会保留原始 HTTP 方法(POST 仍为 POST),而 302 许多浏览器会将 POST 降级为 GET。因此,如果重定向的页面接收表单数据,请考虑使用 307。但对于普通内容网站的 SEO 而言,301 仍是首选。

301 重定向与 SEO

当您更改 URL 结构时,301 重定向是保留排名的关键工具。操作正确可保留已积累的权重;操作错误则可能失去全部 Google 流量。以下是 SEO 方面的注意事项:

移动 URL 后,更新站点地图、修改内部链接直接指向新 URL,并将新 URL 提交至 Google Search Console 以加快重新索引。301 则负责处理您无法编辑的旧外部链接。

常见问题

301 和 302 对 SEO 有什么区别?

301 是永久移动:搜索引擎将大部分链接权重传递给新 URL 并更新索引。302 是临时重定向:搜索引擎继续索引原始 URL,不传递链接权重。站点迁移、URL 变更和强制 HTTPS 使用 301;仅在真正临时的情况下(如维护页面或 A/B 测试)使用 302。

如何修复 .htaccess 中的重定向循环?

重定向循环通常是因为目标地址仍匹配同一规则。添加 RewriteCond 将目标排除在匹配之外——例如在重写前检查 %{HTTPS} off 或 %{HTTP_HOST}——且不要将添加斜杠规则和移除斜杠规则同时使用。清除浏览器缓存(因为已缓存的 301 即使修复文件后仍会继续重定向),并在无痕模式下测试。

301 重定向会影响 SEO 排名吗?

会,正确操作时有积极影响。301 将约 90-99% 的链接权重从旧 URL 传递到新 URL,并在强制使用单一 HTTPS 及 www 或 non-www 版本时防止重复内容。避免重定向链(A → B → C),因为每次跳转都会增加延迟并稀释链接权重。始终直接重定向到最终目标。

.htaccess 中 RewriteRule 的顺序重要吗?

非常重要。Apache 从上到下依次处理规则。强制全站 HTTPS 等广泛规则应放在前面,而特定 URL 规则应使用 [L] 标志在匹配后停止规则链。错误的顺序可能导致某些重定向被跳过或产生循环。

需要支持完整 .htaccess 的泰国主机吗?

AsiaGB 主机所有方案均支持 Apache mod_rewrite,每年仅需 500 泰铢起,正常运行时间保证达 99%。

查看主机方案

查看泰国虚拟主机全部套餐 →