
通过 url 重写(rewrite)与动态路由,可将 `https://mywebsite.com/article1` 这类“伪静态”地址映射到统一的 php 处理脚本(如 `article.php`),再根据路径参数查询数据库并渲染对应文章,避免为每篇文章创建独立 html 文件。
这种技术在 Web 开发中被称为 URL 重写(URL Rewriting) 或 前端控制器模式(Front Controller Pattern),其核心目标是实现语义化、可读性强且 SEO 友好的 URL,同时保持后端逻辑集中可控。
✅ 实现步骤(以 Apache + PHP 为例)
1. 启用 .htaccess 重写规则
在网站根目录创建或编辑 .htaccess 文件,添加以下规则:
# 启用重写引擎
RewriteEngine On
# 防止重写 CSS/JS/图片等静态资源
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 将 /article1、/article2 等请求重写为 article.php?slug=article1
RewriteRule ^article([0-9]+)$ article.php?slug=article$1 [L,QSA]
# 或更通用的写法(推荐):匹配任意文章标识符(如标题拼音、ID 或自定义 slug)
# RewriteRule ^article/([^/]+)/?$ article.php?slug=$1 [L,QSA]? 提示:[L] 表示最后一条规则,[QSA] 保留原始查询参数(如 ?ref=source)。
2. 编写 article.php 动态处理页
该文件统一响应所有 /article* 请求,并从 URL 中提取标识符(如 article1),查询数据库并输出内容:
prepare("SELECT id, title, content, created_at FROM articles WHERE slug = ? AND status = 'published'");
$stmt->execute([$slug]);
$article = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$article) {
http_response_code(404);
die('Article not found.');
}
?>
= htmlspecialchars($article['title']) ?>
= htmlspecialchars($article['title']) ?>
= nl2br(htmlspecialchars($article['content'])) ?>
3. 数据库建议结构(关键字段)
CREATE TABLE articles (
id INT PRIMARY KEY AUTO_INCREMENT,
slug VARCHAR(128) UNIQUE NOT NULL COMMENT '用于 URL 的唯一标识,如 article1 或 how-to-use-rewrite',
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
status ENUM('draft','published') DEFAULT 'published',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);✅ 强烈建议使用 slug 字段(而非仅依赖 ID)——它更友好、可读、稳定,且支持中文转拼音、去标点、小写化等 SEO 优化。
⚠️ 注意事项与最佳实践
- 永远校验与过滤输入:$_GET['slug'] 必须经 htmlspecialchars() 输出、预处理语句查询,杜绝 XSS 和 SQL 注入。
- 返回正确 HTTP 状态码:查无结果时发送 404 Not Found;临时跳转用 302,永久跳转用 301。
- 考虑缓存策略:对高访问文章启用 OPcache、Redis 或静态化缓存,减轻数据库压力。
- 兼容性扩展:若需支持 /article/123 或 /blog/my-first-post,只需调整 .htaccess 规则和 article.php 中的解析逻辑。
- Nginx 用户注意:需在 server 块中配置 try_files $uri $uri/ /article.php?slug=$uri;,语法不同但原理一致。
通过以上方式,你不仅能告别海量静态文件,还能构建出专业、可维护、利于搜索引擎收录的内容站点。真正的动态,藏在简洁的 URL 之下。











