【问题标题】:Url Rewrite for year, month and day年月日 URL 重写
【发布时间】:2011-05-18 07:41:04
【问题描述】:

我想实现这样的目标:http://example.com/year/month/day 而不是 http://example.com?year=yyyy&month=mm&day=dd

我希望它仅在匹配仅是数字时重写,当第一段(年)是 4 位数字时,第二段月在 01 和 12 之间(d 年的月份),最后一段(日) 介于 01 - 31(一个月中的天数)之间。

请问我如何才能做到这一点

【问题讨论】:

    标签: php apache url-rewriting


    【解决方案1】:

    我认为您应该检查脚本中的月份和日期。但这里是正则表达式。

    已更新以匹配带有可选尾随斜杠的单个数字日期或月份。

    RewriteRule ^(\d{4})/(0?[1-9]|1[0-2])/(0?[1-9]|[12][0-9]|3[01])/?$ ?y=$1&m=$2&d=$3
    

    仅适用于带有可选斜杠的年份和月份。

    RewriteRule ^(\d{4})/(0?[1-9]|1[0-2])/?$ ?y=$1&m=$2
    

    【讨论】:

    • 应该检查脚本中的月份和日期。
    • @Teneff 不,因为最后两位数字必须是EOL
    • 效果很好,只是您可能需要考虑在末尾添加一个可选的正斜杠 :)
    • 非常感谢,我注意到如果 01 写为 1,它不起作用,请问我该如何解决它;另外,如果我只想使用年份和月份,我是否删除 '((?:0[1-9]|1[0-2]))/'?
    • @Ogugua Belonwu:更新答案。
    【解决方案2】:

    我能想到的最好的是:

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(\d{4})/(0[1-9]|10|11|12)/(0[1-9]|[12][0-9]|3[01])/?$  index.php?y=$1&m=$2&d=$3 [L]
    

    【讨论】:

    • 非常感谢,我注意到如果 01 写为 1,它不起作用,请问我该如何解决它;另外,如果我只想使用年份和月份,我是否删除 '(0[1-9]|10|11|12)/'?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 2013-06-20
    • 2021-08-24
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多