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

如何编写匹配合法月日的URL正则?适用于.htaccess场景

修正后的.htaccess正则表达式方案

需求回顾

需要匹配以下URL格式,且日期部分(月-日)必须同时存在,月份范围1-12,日期范围1-31:

  • gallery/a-day-like-today
  • gallery/a-day-like-today/
  • gallery/a-day-like-today/2-18
  • gallery/a-day-like-today/2-18/

原正则的问题

  1. 允许日期部分缺失日((\d{1,31})?中的?导致日可选),违反“月份和日期必须同时存在”的要求
  2. 未限制月份(1-12)和日期(1-31)的数值范围,会匹配13-5、10-32这类无效日期

修正后的RewriteRule

RewriteRule ^gallery/a-day-like-today(?:/(?:0?[1-9]|1[0-2])-(?:0?[1-9]|[12]\d|3[01]))?/?$ gallery/a_day_like_today.php?month=$1&day=$2 [L]

正则拆解

  • ^gallery/a-day-like-today:匹配基础路径开头
  • (?:/(?:0?[1-9]|1[0-2])-(?:0?[1-9]|[12]\d|3[01]))?:可选的日期部分(整个块加?表示可省略)
    • /(?:0?[1-9]|1[0-2]):匹配月份,支持1-9、01-09、10-12
    • -(?:0?[1-9]|[12]\d|3[01]):匹配日期,支持1-9、01-09、10-29、30-31
  • /?$:匹配末尾可选的斜杠,确保带/和不带/的路径都能匹配

匹配验证

会被匹配的有效路径

  • gallery/a-day-like-today
  • gallery/a-day-like-today/
  • gallery/a-day-like-today/2-18
  • gallery/a-day-like-today/2-18/
  • gallery/a-day-like-today/09-08
  • gallery/a-day-like-today/12-31/

不会被匹配的无效路径

  • gallery/a-day-like-today/13-5(月份超出1-12范围)
  • gallery/a-day-like-today/10-32(日期超出1-31范围)
  • gallery/a-day-like-today/5-(缺失日期部分)
  • gallery/a-day-like-today/-10(缺失月份部分)

可选调整:禁用前导零

如果不需要支持02-18这类带前导零的日期格式,可将正则调整为:

RewriteRule ^gallery/a-day-like-today(?:/(?:[1-9]|1[0-2])-(?:[1-9]|[12]\d|3[01]))?/?$ gallery/a_day_like_today.php?month=$1&day=$2 [L]

内容的提问来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:05:30