如何通过.htaccess在URL中新增年份目录并匹配指定文章?
如何通过.htaccess在URL中新增年份目录并匹配指定文章?
嗨,我来帮你搞定这个.htaccess的URL重写问题!你想要给新文章的URL加上4位数字的年份目录(比如2025、2026),同时让服务器能正确找到对应的PHP内容,对吧?
首先,你需要在网站根目录的.htaccess文件里添加下面的重写规则——先确保开启重写引擎,再写匹配年份格式的规则:
RewriteEngine On # 匹配带年份的URL:/年份/分类/文章别名,转发到PHP处理脚本 RewriteRule ^(\d{4})/([^/]+)/([^/]+)$ article.php?year=$1&category=$2&slug=$3 [L,QSA] # 可选:兼容旧的不带年份的URL,让旧链接依然能正常访问 RewriteRule ^([^/]+)/([^/]+)$ article.php?category=$1&slug=$2 [L,QSA]
我给你拆解下这些规则的作用:
RewriteEngine On:这是开启重写的“开关”,没有它所有重写规则都不会生效,必须放在最前面。- 第一条规则里,
^(\d{4})专门抓取4位数字的年份(比如2025、2026,确保只有合法的年份格式才会被匹配);后面的两个([^/]+)分别抓取你的分类名(比如flowers-and-garden)和文章别名(比如white-flowers-in-spring)。这些被抓取的内容会作为参数传给你的PHP处理脚本(这里用article.php举例,你可以改成自己实际用的脚本文件名)。 - 规则末尾的
[L,QSA]是两个关键标志:L表示匹配到这条规则后就停止往下执行其他规则;QSA的作用是如果原URL里带了其他参数(比如?utm_source=xxx),会自动把这些参数附加到转发后的URL上,不会丢失。
接下来,你的PHP脚本里就可以通过$_GET['year']拿到年份,$_GET['category']拿到分类,$_GET['slug']拿到文章别名,然后根据这些值去数据库或者文件系统里找到对应的文章内容就行。
最后给你提几个小注意事项:
- 要确认你的Apache服务器开启了
mod_rewrite模块,要是没开的话这些规则不会生效,你可以联系主机商帮忙开启,或者自己在服务器配置里打开。 - 如果根目录已经有
.htaccess文件,别直接覆盖掉原来的内容,把这些规则加在现有规则的前面或者合适的位置,避免和旧规则冲突。 - 测试的时候直接访问带年份的URL,比如
www.example.com/2025/flowers-and-garden/white-flowers-in-spring,然后在PHP脚本里用var_dump($_GET)看看参数是不是都正确传过来了,这样能快速排查问题。
备注:内容来源于stack exchange,提问作者3D-kreativ
相关产品推荐
相关产品推荐

