htaccess mod_rewrite regex - 包含数字但不包括字母

时间:2013-09-30 02:26:46

标签: regex .htaccess mod-rewrite negative-lookahead

我一直在与正则表达式斗争,在读完它45分钟后,我的脑袋在转动。负面的向前看,是什么......? (?:/(?:(?!s \ d +)。)*)+ $< --- OMG !!!

:(

所以,我有一条规则

RewriteRule /([0-9]+) /?id=$1 [R]

,当网址为www.hi.com/123

时,它可以正常工作

如果网址为/www.hi.com/123abc,如何刷新www.hi.com/a123bc(此案例为文档根目录)?

我只是想确保仅包含数字且没有其他的网址匹配。

我试过

RewriteRule /([0-9]+)([^a-z]+) /map.htm?marker=$1 [R]

但奇怪的是,这会刷新到www.hi.com/?id=404

1 个答案:

答案 0 :(得分:0)

要匹配正则表达式中的1个或多个数字,它将是:

[0-9]+

要匹配正则表达式中的一个或多个数字或字母,它将是:

[0-9a-zA-z]+

对于您的案例,RewriteRule规则将是:

RewriteRule ^([0-9a-z]+)/?$ /map.htm?marker=$1 [NC,L,R=302]

将匹配/123abc/123abc//123/abc/,请注意尾部斜杠是可选的。我使用的标志是:

NC    - Ignore Case
L     - Last
R=301 - Use http status 302 for resulting URL

我强烈建议您阅读mod_rewrite参考文档:Apache mod_rewrite Introduction

但是你也问过:

  

如果是,我怎样才能刷新/(在这种情况下是文档根目录)   网址是www.hi.com/123abc或www.hi.com/a123bc?

该规则将是:

RewriteRule ^([0-9a-z]+)/?$ / [NC,L,R=302]