本文介绍如何使用 `.htaccess` 中的 `mod_rewrite` 规则,将除根目录、`index.php`、`video-archive.php`
等特定路径外的所有请求统一交由 `article.php` 处理,并兼容本地 xampp 开发与线上服务器部署。
要在 PHP 项目中实现“默认路由到 article.php,但保留关键页面直通”的需求,最简洁可靠的方式是利用 Apache 的 mod_rewrite 模块配合 .htaccess 文件。该方案天然支持 XAMPP(Windows/macOS/Linux 本地开发环境)及绝大多数 Linux 主机(如 cPanel、DirectAdmin 或自建 LAMP 服务器),无需修改 PHP 应用逻辑,也无需依赖框架路由器。
Apache 不直接识别“哪些 URL 是例外”,但能高效判断请求路径是否对应真实存在的文件(-f)或目录(-d)。因此,我们采用“白名单式放行 + 黑名单式兜底”的策略:
在网站根目录(如 htdocs/ 或 public_html/)下创建或编辑 .htaccess 文件,写入以下内容:
RewriteEngine On
# 排除真实存在的文件和目录(自动放行 index.php, video-archive.php, images/, etc.)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ article.php [QSA,L]⚠️ 注意事项: 确保 Apache 已启用 mod_rewrite(XAMPP 默认开启;生产环境可执行 a2enmod rewrite 并重启 Apache); 确保主配置或虚拟主机中允许 .htaccess 覆盖:AllowOverride All(XAMPP 的 httpd.conf 中通常已配置); .htaccess 文件名必须严格为 .htaccess(开头带点,Linux 下为隐藏文件); 修改后需清除浏览器缓存或使用无痕窗口测试。
重写后,用户访问 https://example.com/about-us 实际执行的是 article.php,但 $_SERVER['REQUEST_URI'] 仍保留原始值(如 /about-us)。推荐使用以下方式安全提取文章标识符:
// article.php
$rawPath = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$articleSlug = trim($rawPath, '/'); // 去除首尾斜杠 → "about-us"
$articleSlug = rtrim($articleSlug, '.php'); // 去除可能的 .php 后缀 → "about-us"
// 示例:根据 slug 查询数据库或加载对应文章
// $article = getArticleBySlug($articleSlug);
echo "正在加载文章:{$articleSlug}";此方式健壮支持多种 URL 形式:
若需显式排除某些路径模式(例如强制 /admin/ 永不进入 article.php),可在规则前增加否定条件:
# 显式排除 /admin 和 /api 开头的路径
RewriteCond %{REQUEST_URI} !^/admin(/|$)
RewriteCond %{REQUEST_URI} !^/api(/|$)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ article.php [QSA,L]该方案以最小侵入性实现灵活路由:
? 零代码修改:不改动现有 index.php 或 video-archive.php;
? 静态资源友好:图片、CSS、JS 等文件因真实存在而直通,不经过 PHP;
? 前后端解耦:前端可自由设计语义化 URL,后端统一由 article.php 解析;
? 平滑迁移:XAMPP 本地测试通过后,上线时仅需确认服务器支持 .htaccess 即可无缝运行。
从此,你的博客、CMS 或内容站点即可拥有专业级 SEO 友好 URL 结构,同时保持架构清晰、维护简单。