使用日期正则表达式的mod_rewrite规则

时间:2013-09-18 19:00:08

标签: regex apache .htaccess mod-rewrite

我正在尝试编写一条规则,当用户输入此网址时<:p>

domain.com/09/13/2013/thisIsMyPageTitle

该网址停留在浏览器窗口中,但会显示此网址的内容:

domain.com/contentlibrary/thisIsMyPageTitle

这是我的规则,我目前收到错误:

RewriteEngine On
RewriteRule ^((0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d[/])$(.*) /contentlibrary/$1  [L]

我正在尝试将日期与正则表达式匹配,并使用第二个中保存内容且实际存在的初始URL中的(。*)。

2 个答案:

答案 0 :(得分:3)

如果您不打算对日期做任何事情,那么为什么要精确地使用日期语义呢? 您可以简化正则表达式:

RewriteRule ^[0-9]+/[0-9]+/[0-9]+/([^/]+)/?$ /contentlibrary/$1 [L]

答案 1 :(得分:0)

您获得的错误可能是因为您的正则表达式中没有未转义的空格。特别是这些:

[- /.]

mod_rewrite将空格解释为参数之间的分隔符。另外,你有这个:

$(.*)

在你的模式结束时。 $匹配字符串结尾,因此您需要交换的内容:

(.*)$

所以:

^((0[1-9]|1[012])[-\ /.](0[1-9]|[12][0-9]|3[01])[-\ /.](19|20)\d\d[/])(.*)$

称为你想要的模式。