如何为网站配置重定向功能
1 何谓网站重定向
网站重定向是一种服务器响应技术,它允许网站管理员将用户从一个网页或域名重定向到另一个网页或域名。重定向可以通过服务器端或客户端实现,主要通过 HTTP 状态码来指示重定向的动作。例如 301 重定向是一种永久性重定向,表明旧地址的资源已被永久移动到新地址。
常见应用场景:
- 域名变更:网站更换域名时,用 301 重定向把旧域名的访问者引导到新域名,同时保持搜索引擎排名和链接权重;
- 网站结构优化:重构或改版后,把旧 URL 重定向到新的结构化页面;
- 页面迁移:页面移动到新位置后,把旧地址的访问者引导到新页面;
- 处理错误页面:自动把用户从错误页面转到正确页面,提升体验;
- 多版本网站管理:带 www 与不带 www 的版本通过 301 明确首选域,避免权重分散;
- 实施 SEO 策略:合理使用 301 可有效传递页面权重,避免改动造成权重损失。
2 网站重定向的好处
- 集中权重:把旧地址上的权重转移到新地址,有助于提高新页面的搜索排名;
- 提高用户体验:避免用户因 URL 变更或页面移动而遇到错误页面;
- 保持链接引用:已有外部链接通过重定向保持有效,不会失效;
- 避免重复内容:让搜索引擎只索引一个版本,避免重复内容带来的惩罚;
- 简化网站管理:合理的重定向策略可简化大型站点的维护工作。
3 重定向配置
本例在 Linux x86_64 的 Fast-Https v1.4.0 上验证。将发行包解压到独立的测试目录,确认目录中有 fast-https 和 httpdoc/root/index.html。示例使用空闲的 7000 端口。v1.4.0 发行包
3.1 配置测试站点
打开测试目录中的 config/fast-https.json,写入并保存以下配置。
{
"http": {
"server": [
{
"listen": 7000,
"server_name": "localhost",
"location": [
{
"url": "/api1",
"type": "rewrite",
"rewrite": "http://127.0.0.1:7000/index.html"
},
{
"url": "/",
"type": "local",
"root": "./httpdoc/root",
"index": ["index.html"]
}
]
}
]
}
}
第一条 location 匹配 /api1,返回 301,并在 Location 响应头中给出 rewrite 指定的目标地址。第二条 location 从 ./httpdoc/root 提供目标页 index.html。
3.2 启动并验证
在测试目录的终端中检查配置。
./fast-https check
看到 config ok 后,启动服务。
./fast-https start
服务启动后,在另一个终端请求 /api1,查看首次响应。
curl --noproxy '*' -siS http://127.0.0.1:7000/api1
响应包含 301 和跳转目标。
HTTP/1.1 301 Moved Permanently
Connection: close
Location: http://127.0.0.1:7000/index.html
使用 -L 跟随跳转,查看最终状态码和地址。
curl --noproxy '*' -sSL -o /dev/null -w '%{http_code} %{url_effective}\n' http://127.0.0.1:7000/api1
输出 200 和目标地址,表示跳转后的页面可以正常访问。
200 http://127.0.0.1:7000/index.html

测试结束后,在可输入命令的终端进入测试目录,停止服务。
./fast-https stop
4 案例:HTTP 自动跳转 HTTPS
将同一个 Fast-Https v1.4.0 发行包解压到另一个空目录。本例用 17080 接收 HTTP 请求,用 17443 提供 HTTPS 首页。
4.1 配置 HTTP 和 HTTPS 站点
将新目录中的 config/fast-https.json 替换为以下配置。
{
"http": {
"server": [
{
"listen": 17080,
"server_name": "localhost",
"location": [
{
"url": "/",
"type": "rewrite",
"rewrite": "https://localhost:17443/"
}
]
},
{
"listen": "17443 ssl",
"server_name": "localhost",
"ssl_certificate": "config/cert/localhost.pem",
"ssl_certificate_key": "config/cert/localhost-key.pem",
"location": [
{
"url": "/",
"type": "local",
"root": "./httpdoc/root",
"index": ["index.html"]
}
]
}
]
}
}
第一个 server 用 rewrite 返回固定的 HTTPS 地址。第二个 server 加载证书和私钥,通过 HTTPS 提供 ./httpdoc/root/index.html。
4.2 启动并验证跳转
在新解压的目录中启动服务。首次启动会生成 localhost 的证书、私钥和供验证用的 httpdoc/root/root.crt。如果先运行 ./fast-https check,配置检查会报证书文件缺失。
FASTHTTPS_FOREGROUND=1 ./fast-https start
看到 Listen 0.0.0.0:17080 和 Listen 0.0.0.0:17443 后,让服务继续运行。另开一个终端,进入同一个测试目录,查看 HTTP 响应。
curl --noproxy '*' -siS http://localhost:17080/
HTTP/1.1 301 Moved Permanently
Connection: close
Location: https://localhost:17443/
使用 -L 跟随跳转,并用 --cacert 指定测试目录生成的 CA 证书。下面两行是同一条命令。
curl --noproxy '*' --cacert httpdoc/root/root.crt \
-sSL -o /dev/null -w '%{http_code} %{url_effective}\n' http://localhost:17080/
证书验证通过后,最终的 HTTPS 页面返回 200。
200 https://localhost:17443/

在验证用的终端中停止这次测试服务。
./fast-https stop
4.3 在正式站点使用
使用标准端口时,将两个站点的 listen 分别设为 80 和 "443 ssl",将两个 server_name 设为实际域名。将 rewrite 设为该域名的 HTTPS 地址,例如 https://example.com/。将 ssl_certificate 和 ssl_certificate_key 指向客户端信任的域名证书和匹配的私钥。