本文详解如何通过 apache 的 mod_rewrite 模块,利用 .htaccess 文件将站点根目录(/)及所有形如 `/en2`、`/en100` 的非 `/en1` 语言子路径,统一、安全地 302 重定向至标准入口 `/en1`,避免 404 错误与循环跳转。
在实际 Web 部署中,常需将多个相似语义但非标准的 URL 统一导向唯一权威入口——例如强制所有 example.com/、example.com/en2、example.com/en99 等请求,全部重定向至 example.com/en1(该路径对应真实存在的 index.php 入口)。单纯依赖 PHP 层判断(如 strpos($_SERVER[‘REQUEST_URI’], “en1”) === false)存在严重缺陷:它仅在 PHP 脚本被成功加载后才执行,而 /en2 等路径若未配置路由或物理文件,Apache 会直接返回 404,根本无法触发 PHP 逻辑;同理,RedirectMatch 和简单 RewriteRule 组合因缺乏条件判断与精确锚点匹配,易导致规则冲突或重定向失效。
正确方案应完全交由 Apache 在请求处理早期阶段(即内容分发前)完成重定向,确保零 PHP 依赖、高可靠性与低延迟。以下是推荐的 .htaccess 配置:
RewriteEngine On
# 规则1:将根路径 / 重定向至 https://example.com/en1(含协议+域名,避免相对路径歧义)
RewriteRule ^$ https://example.com/en1 [R=302,L]
# 规则2:匹配所有以 "en" 开头、后接一个或多个数字的路径(如 /en2、/en100),但排除 /en1 本身
RewriteCond %{REQUEST_URI} !^/en1$ # 注意:此处必须用 ^/en1$ 精确匹配完整路径
RewriteRule ^en[0-9]+/?$ https://example.com/en1 [R=302,L]
✅ 关键说明: