RewriteRule。?仅限一个或多个字符?

时间:2011-02-22 11:41:02

标签: regex url mod-rewrite period chars

在网上我找到了几种定义RewriteRule的方法,如:

RewriteRule .? 404.php [L]
RewriteRule . 404.php [L]
RewriteRule ^ 404.php [L]

但是为什么这些在输入垃圾网址时会起作用?因为第一个(.?)意味着应该有零个或一个char,这将导致404.php(不是一堆字符或一个单词)。同样地,.^分别只查找一个字符和一行的开头(不是一行有几个字符或单词,对吧?)。这就是我基于RegEx帮助的想法。我错了吗?或者......?

2 个答案:

答案 0 :(得分:0)

他们的工作原因是他们可能匹配“垃圾网址”。由于.?匹配零个或一个字符,.匹配单个字符,^只匹配字符串的开头(无论如何)。

问题是,您如何区分“垃圾”和“非垃圾”网址。

答案 1 :(得分:0)

我没有测试过,但我认为这会将任何请求重定向到404.php。

正则表达式.?将在网址的任意位置搜索0或1个字符,即任何字符。所以基本上,任何网址都会匹配第一个正则表达式并重定向。

该行末尾的[L]使mod-rewrite在发现匹配时不再处理任何规则。