跳转到主内容
极星编程网:以代码为星,赴技术山海!

URL重写与动态路由:PHP中实现类似/article1的美观文章链接

本文介绍如何在 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和网站经销商平台 下载
# 启用重写引擎 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]
⚠️ 注意:确保Apache已启用 mod_rewrite 模块,并在虚拟主机配置中允许 .htaccess 覆盖(AllowOverride All)。 2. 编写动态文章 处理器 (article.php)
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']) ?>

3. Nginx 用户替代方案( nginx .conf 片段)
location ^~ /article/ { rewrite ^/article/([0-9]+)/?$ /article.php?id=$1 last; }
? 关键要点与最佳实践 永远不要直接拼接 $_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简洁专业,同时保持代码高度复用与安全可控。

相关文章