本文介绍如何在
php
网站中通过url重写(rewrite)和动态
路由
机制,将冗长的`?articleid=1`参数式链接转换为简洁美观的`/article1`或`/article/1`等伪静态路径,提升
seo
与用户体验。
在现代PHP内容网站中,直接为每篇文章创建独立HTML文件(如 article1.
html
)不仅难以维护,还违背了DRY(Don’t Repeat Yourself)原则。更专业、可扩展的做法是:
统一使用单个PHP入口(如 article.php),配合URL重写规则,将形如 /article/123 的请求“隐式转发”给该脚本处理
——用户看到的是干净路径,后端执行的仍是动态查询。
✅ 核心技术:URL重写(Apache/Nginx) + 动态路由
1. 启用URL重写(以Apache为例)
在项目根目录创建或编辑 .ht
access
文件:
SEO GPT
免费的白帽SEO,PPC和网站经销商平台
下载
⚠️ 注意:确保Apache已启用 mod_rewrite 模块,并在虚拟主机配置中允许 .htaccess 覆盖(AllowOverride All)。
2. 编写动态文章
处理器
(article.php)
3. Nginx 用户替代方案(
nginx
.conf 片段)
? 关键要点与最佳实践
永远不要直接拼接 $_GET 参数到SQL中
:必须使用PDO预处理或MySQLi绑定参数,杜绝SQL注入。
输出前转义HTML内容
:使用 htmlspecialchars() 防止XSS攻击。
返回正确HTTP状态码
:查无结果时发送 404 Not Found,而非空白页或200。
SEO友好建议
:在数据库中为每篇文章添加 slug 字段(如 how-to-use-url-rewrite),改用 /article/how-to-use-url-rewrite,更语义化且利于排名。
避免过度重写
:确保重写规则不干扰真实存在的静态文件(CSS/JS/图片),.htaccess 中的 !-f 和 !-d 条件必不可少。
通过以上配置,你的网站即可优雅支持无限量文章,URL简洁专业,同时保持代码高度复用与安全可控。
# 启用重写引擎
RewriteEngine On
# 防止重写静态资源(CSS/JS/图片等)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 将 /article/123 → /article.php?id=123
RewriteRule ^article/([0-9]+)/?$ article.php?id=$1 [L,QSA]
# 可选:支持 /article1 → /article.php?id=1(需确保无冲突)
# RewriteRule ^article([0-9]+)/?$ article.php?id=$1 [L,QSA]prepare("SELECT title, content, created_at FROM articles WHERE id = ?");
$stmt->execute([$id]);
$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'])) ?>
location ^~ /article/ {
rewrite ^/article/([0-9]+)/?$ /article.php?id=$1 last;
}