核心要点

  1. 文件位置.htaccess 文件必须位于你网站的根目录public_htmlwww)中,如果你想重定向根目录下的一个文件,它就在这里,如果你想重定向子目录下的文件,它也需要在根目录中。
  2. 语法清晰:确保语法正确,特别是空格和引号。
  3. 备份:在修改 .htaccess 之前,务必备份一份原始文件,以防修改出错导致网站无法访问。

重定向单个文件(最常用)

这是最直接的情况,比如将 old-page.html 永久重定向到 new-page.html

.htaccess 单网页 301
(图片来源网络,侵删)

场景:

  • 旧页面:https://www.yourdomain.com/old-page.html
  • 新页面:https://www.yourdomain.com/new-page.html

代码:

将以下代码添加到你的 .htaccess 文件中:

# 将旧页面永久重定向到新页面
Redirect 301 /old-page.html https://www.yourdomain.com/new-page.html

代码解释:

  • Redirect 301:指定进行 301(永久)重定向。
  • /old-page.html:这是相对于网站根目录的旧文件路径,即使访问者输入 yourdomain.com/old-page.html,服务器也能正确找到。
  • https://www.yourdomain.com/new-page.html:这是完整的新 URL 地址。强烈建议使用完整的 URL,以避免因域名解析问题导致重定向失败。

重定向到域名根目录(首页)

如果你想将一个旧页面直接重定向到网站的主页。

场景:

  • 旧页面:https://www.yourdomain.com/old-article.html
  • 新页面:https://www.yourdomain.com/ (网站首页)

代码:

# 将旧页面永久重定向到网站首页
Redirect 301 /old-article.html https://www.yourdomain.com/

或者

.htaccess 单网页 301
(图片来源网络,侵删)
# 将旧页面永久重定向到网站首页 (结尾的斜杠可选)
Redirect 301 /old-article.html https://www.yourdomain.com

使用 mod_rewrite (更灵活、更强大)

Redirect 指令简单直接,但功能有限。mod_rewrite 是 Apache 的一个强大模块,可以实现更复杂的重定向规则,虽然对于单个页面有点“杀鸡用牛刀”,但它是处理重定向问题的标准做法,尤其在未来规则变复杂时更具扩展性。

场景:

与方法一相同,将 old-page.html 重定向到 new-page.html

代码:

将以下代码添加到 .htaccess 文件中:

# 启用 mod_rewrite 引擎
RewriteEngine On
# 定义重定向规则
# 规则说明:如果请求的路径是 /old-page.html,则进行 301 重定向
RewriteRule ^old-page.html$ https://www.yourdomain.com/new-page.html [L,R=301]

代码解释:

.htaccess 单网页 301
(图片来源网络,侵删)
  • RewriteEngine On:开启 URL 重写引擎,这通常是 .htaccess 中重写规则的第一行。
  • RewriteRule:定义一条重写规则。
  • ^old-page.html$:这是一个正则表达式
    • ^ 表示字符串的开始。
    • 表示字符串的结束。
    • 这个模式精确匹配 old-page.html 这个路径,不会匹配 /old-page.html/ 或其他类似路径。
  • https://www.yourdomain.com/new-page.html:匹配成功后,跳转到的目标 URL。
  • [L,R=301]:这是规则的标志
    • R=301:表示执行一个 301 重定向。
    • L:表示如果这条规则被匹配,则停止处理后续的 RewriteRule 规则。

重要提示:wwwhttps 的规范化

在设置重定向时,最好同时考虑域名带 www 和不带 www 以及 HTTP 和 HTTPS 的统一性问题,否则,你可能会创建多个重复的内容版本,不利于 SEO。

我们建议将所有流量统一到 https://www.yourdomain.com

你可以将以下代码放在 .htaccess 文件的最顶部,确保它在你的单页面重定向规则之前执行,这套代码会强制将所有非 www 和非 https 的请求都规范化到 https://www.yourdomain.com

# 1. 强制使用 HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 2. 强制使用 www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

注意:上面的两段代码可以合并,但为了清晰,这里分开展示,在实际使用中,确保 RewriteEngine On 只出现一次。


完整示例

假设你的网站是 www.yourdomain.com,你想将 about-us.html 重定向到 about.html,并且希望整个网站都强制使用 https://www

你的 .htaccess 文件内容应该是这样的:

# =================================================================
# 1. 规范化域名和协议 (强制 www 和 https)
# =================================================================
# 启用重写引擎
RewriteEngine On
# 如果不是 HTTPS,则重定向到 HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 如果不是 www,则重定向到 www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# =================================================================
# 2. 单个页面 301 重定向
# =================================================================
# 这里使用 mod_rewrite 方式,因为它更灵活
# 将 /about-us.html 重定向到 /about.html
RewriteRule ^about-us\.html$ https://www.yourdomain.com/about.html [L,R=301]
# 你也可以在这里添加其他的 Redirect 301 指令
# Redirect 301 /another-old-page.html https://www.yourdomain.com/some-new-page.html

如何验证?

设置完成后,你可以使用以下工具来验证重定向是否正确:

  1. 浏览器地址栏:直接输入旧页面地址,看是否跳转到新页面,并且浏览器地址栏的 URL 是否正确。
  2. 在线检查工具
    • Redirect Checker (https://redirectchecker.com/)
    • SEOmofo's Redirect Path (Chrome 浏览器插件)
    • 这些工具会清晰地显示重定向的链路和状态码(必须是 301)。

希望这份详细的指南能帮助你成功设置单网页的 301 重定向!