You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用.htaccess实现带斜杠、下划线或日期分隔符的友好URL重定向问题求助

.htaccess实现带斜杠、下划线或日期分隔符的友好URL重定向问题求助

嘿,我来帮你排查这个.htaccess重写的问题!先看你已经成功的例子,你之前的规则写得没问题,但这次的规则踩了个小坑,咱们一步步来解决~

你想要实现的是:要么访问新的友好URL https://example.com/2023/not-the-dinner-day-photographs 时,服务器内部加载旧路径 archive/galleries/2023/20230204_ntdd/ 的内容;要么是访问旧路径时自动跳转到新URL。先看你自己写的规则问题出在哪:

你写的规则里:

RewriteRule ^(\d{4})/not-the-dinner-day-photographs/?$ archive/galleries/$1/$2_ntdd/ [NC,L]

这里的$2完全没有被捕获到!因为你的正则表达式里只有一个捕获组(\d{4}),所以$2是空值,导致重写后的路径变成archive/galleries/2023/_ntdd/,这显然和你要的旧路径不符。

情况1:内部重写(访问新URL,加载旧路径内容)

如果旧路径里的日期后缀是固定的(比如20230204就是年份+0204),那可以直接把年份和固定日期拼接起来:

RewriteEngine On
# 新URL重写到旧路径,自动拼接年份+固定日期
RewriteRule ^(\d{4})/not-the-dinner-day-photographs/?$ archive/galleries/$1/$10204_ntdd/ [NC,L]

这里的$10204会被解析为$1(捕获到的年份,比如2023)加上0204,刚好拼成20230204,完美匹配旧路径的文件夹名。

如果旧路径里的日期是任意的(只要是年份开头的,比如2023xxxx),那需要用RewriteCond先确认目标文件夹存在,再重写:

RewriteEngine On
# 先捕获年份,确认对应的旧文件夹存在
RewriteCond %{DOCUMENT_ROOT}/archive/galleries/%1/%1[^/]+_ntdd/ -d
RewriteRule ^(\d{4})/not-the-dinner-day-photographs/?$ archive/galleries/$1/$1[^/]+_ntdd/ [NC,L]

情况2:外部永久重定向(访问旧URL,跳转到新URL)

如果你是想让旧URL的访问者自动跳转到新的友好URL(对SEO更友好,建议用301永久重定向),那规则要反过来写:

RewriteEngine On
# 匹配旧路径,捕获年份,重定向到新URL
RewriteRule ^archive/galleries/(\d{4})/\d{4}_ntdd/?$ /$1/not-the-dinner-day-photographs/ [R=301,NC,L]

这里的正则^archive/galleries/(\d{4})/\d{4}_ntdd/?$会匹配所有以年份开头、结尾是_ntdd的旧文件夹路径,捕获年份后跳转到对应的新URL。

备注:内容来源于stack exchange,提问作者hobbsie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 13:43:06