
本文介绍如何使用 `.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)。因此,我们采用“白名单式放行 + 黑名单式兜底”的策略:
- 若请求路径指向真实存在的文件(如 /index.php、/video-archive.php、/css/style.css)→ 直接提供该文件;
- 若请求路径指向真实存在的目录(如 /uploads/)→ 允许目录索引或触发目录内默认文档(如 index.php);
- 其余所有请求(如 /about-us、/how-to-grow-flowers.php)→ 统一重写至 article.php。
? 配置步骤(.htaccess)
在网站根目录(如 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]- RewriteCond %{REQUEST_FILENAME} !-d:当前请求路径不是真实目录;
- RewriteCond %{REQUEST_FILENAME} !-f:当前请求路径不是真实文件;
- RewriteRule ^.*$ article.php [QSA,L]:将全部匹配请求重写为 article.php;
- [QSA] 保留原始查询参数(如 /post?id=123 → article.php?id=123);
- [L] 表示这是最后一条规则,避免后续规则干扰。
⚠️ 注意事项: 确保 Apache 已启用 mod_rewrite(XAMPP 默认开启;生产环境可执行 a2enmod rewrite 并重启 Apache); 确保主配置或虚拟主机中允许 .htaccess 覆盖:AllowOverride All(XAMPP 的 httpd.conf 中通常已配置); .htaccess 文件名必须严格为 .htaccess(开头带点,Linux 下为隐藏文件); 修改后需清除浏览器缓存或使用无痕窗口测试。
? 在 article.php 中获取原始请求路径
重写后,用户访问 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 形式:
- /how-to-grow-flowers → how-to-grow-flowers
- /types-of-flowers.php → types-of-flowers
- /contact/ → contact(注意:若 contact/ 是真实目录,则不会被重写,符合预期)
✅ 扩展建议(按需添加)
若需显式排除某些路径模式(例如强制 /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 结构,同时保持架构清晰、维护简单。











