.htaccess Redirect Guide on DirectAdmin

.htaccess文件是Apache Web Server上URL管理的骨干——为每个DirectAdmin托管计划提供支持。无论您需要将旧页面重定向到新URL、强制HTTPS还是清理URL结构,本指南都涵盖了所有.htaccess重定向方法,并提供了可直接复制粘贴的代码示例。

在DirectAdmin上编辑.htaccess

有两种主要方式在DirectAdmin上编辑.htaccess:

  1. 文件管理器:转到DirectAdmin → 文件 → 文件管理器 → public_html → 点击.htaccess → 编辑
  2. FTP:通过FileZilla连接并在域根目录中编辑.htaccess文件

重要提示:.htaccess在Linux上是隐藏文件(点文件)。如果使用FTP,请先启用"显示隐藏文件"。在FileZilla中,转到服务器 → 强制显示隐藏文件。

301 vs 302重定向:关键差异

在选择重定向类型之前理解差异至关重要:

将HTTP重定向到HTTPS

现代网络托管中最关键的重定向——强制所有流量使用HTTPS:

RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

对于代理或负载均衡器后面的服务器,请改用转发的协议头:

RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

将www重定向到非www(反之亦然)

www → 非www(推荐用于大多数站点)

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

非www → www

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

重定向特定页面

对于将单个页面重定向到新URL,更简单的Redirect指令效果良好:

# Permanent redirect (301) Redirect 301 /about-us.html /about.html # Temporary redirect (302) Redirect 302 /sale /promotion.html

重定向整个文件夹

将旧文件夹下的所有URL重定向到新文件夹:

RedirectMatch 301 ^/old-blog/(.*)$ /blog/$1

使用.htaccess的自定义错误页面

除了重定向,.htaccess还允许您定义自定义错误页面——为访客提供精心设计的体验,而不是Apache的原始错误输出:

# 定义自定义错误页面 ErrorDocument 404 /404.html ErrorDocument 403 /403.html ErrorDocument 500 /500.html # 或重定向到URL ErrorDocument 404 https://yourdomain.com/not-found

精心设计的404页面特别重要:当访客遇到损坏链接时,良好的自定义404页面通过提供导航链接、搜索栏或热门内容链接来让他们保留在您的网站上。没有它,Apache会显示一个平淡的错误,大多数访客会立即离开。

SEO提示:您的自定义404页面必须返回实际的HTTP 404状态代码——而不是200 OK。"软404"(未找到页面上的200状态)会混淆Googlebot并导致它将错误页面索引为真实内容。

查询字符串重定向

重定向具有特定查询字符串参数的URL——在从动态URL迁移到干净的静态slug时很有用:

RewriteEngine On # 将?id=123重定向到干净URL RewriteCond %{QUERY_STRING} ^id=123$ RewriteRule ^product\.php$ /products/new-product/? [L,R=301] # 从路径删除所有查询字符串 RewriteCond %{QUERY_STRING} .+ RewriteRule ^shop/(.*)$ /shop/$1? [L,R=301]

注意目标URL中的末尾?——这告诉Apache从重定向目标中删除原始查询字符串,防止重复参数被追加。

重定向 vs RewriteRule:使用哪个?

两个指令都处理重定向,但它们在功能和用例上有所不同:

特性 Redirect指令 RewriteRule
复杂性 简单,单个URL 灵活,支持模式
正则表达式支持 否 完整的正则表达式支持
条件逻辑 不可用 RewriteCond条件
例子 Redirect 301 /old /new RewriteRule ^old(.*)$ /new$1 [L,R=301]
最适合 单页重定向 HTTPS、www、文件夹、模式重定向

末尾斜杠重定向

强制末尾斜杠

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

移除末尾斜杠

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

将旧域重定向到新域

当您将整个站点迁移到新域时:

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

防止重定向循环

重定向循环(ERR_TOO_MANY_REDIRECTS)是最常见的.htaccess错误。通过以下方式防止它们:

使用curl和在线工具测试重定向

编辑.htaccess后,立即从命令行测试重定向或使用在线检查器查看完整的重定向链:

# 检查HTTP头(单个跳转) curl -I http://yourdomain.com # 跟踪所有重定向并显示每个跳转的头 curl -IL http://yourdomain.com

在线工具如httpstatus.io或redirect-checker.org显示完整的重定向链以及每个步骤的状态代码——便于发现循环或不必要的跳转。将您的重定向链保持在两个跳转或更少(例如,http → https是一个跳转,而不是http → http://www → https)。每个额外跳转为每个访客增加网络延迟。

大多数站点的完整.htaccess模板

Options -Indexes RewriteEngine On # 1. 强制HTTPS RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 2. 将www重定向到非www RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]

提示:所有AsiaGB托管计划都支持mod_rewrite和AllowOverride All,因此.htaccess可以以完全容量工作。计划从500 THB/年开始,提供SSD存储、DirectAdmin控制面板和PHP 7.4/8.2/8.3支持。

使用DirectAdmin的SSD托管

所有计划上的完整mod_rewrite支持。完全按照您的需要配置.htaccess。从500 THB/年开始,提供99%的正常运行时间。

查看托管计划

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