我已经看过并发现有关负面的事情,但我仍然不确定应该为此做些什么。我有一个RewriteRule ^([a-zA-Z0-9]+)/?$
,它可以正常工作,但现在我希望它特别排除“帮助”这个词(只有“帮助”,而不是“帮助”,“小伙子”等),可能还有少量其他的词在将来。对不起,我知道这有很多类似的问题,但我无法弄清楚如何将它们特别应用于此。
答案 0 :(得分:1)
Apache mod-rewrite应该有一个明确定义的顺序,它通过RewriteRules解析它以及如果存在冲突它会遵循哪个规则。
假设它将遵循第一个匹配规则,只需在常规规则之前定义特定规则。
答案 1 :(得分:0)
另外,不管你信不信,你可以编写一个匹配所有字母数字字符串的正则表达式,除了“帮助”。正则表达式([a-zA-Z0-9]+)/?&~help
可以重写为不使用&
和~
(和非)运算符(不广泛使用)的正则表达式。
正则表达式看起来像狗的早餐,所以你真的不想这样做。但这是如何。
首先,匹配所有较短的字母数字代码。 “hel”是可接受的问题,也不是任何其他三个字母/数字序列:
[a-zA-Z0-9]{1,3}
我们还可以识别五个或更多字符的序列;他们也不是“帮助”,包括:
[a-zA-Z0-9]{5,}
现在是棘手的部分,匹配四个字母的序列,这是没有帮助的。这意味着任何四个不以h
开头的char标识符,或任何四个没有e
作为第二个字母的char。等:
[a-gi-zA-Z0-9][a-zA-Z0-9]{3}
[a-zA-Z0-9][a-df-zA-Z0-9][a-zA-Z0-9]{2}
[a-zA-Z0-9]{2}[a-km-zA-Z0-9][a-zA-Z0-9]
[a-zA-Z0-9]{3}[a-oq-zA-Z0-9]
唯一与其中任何一个都不匹配的四个字符模式是“帮助”。它与第一个不匹配,因为h,第二个是因为e等。
所以,将它们与|组合在一起和锚定。深吸一口气:
^([a-zA-Z0-9]{1,3}|[a-zA-Z0-9]{5,}|[a-gi-zA-Z0-9][a-zA-Z0-9]{3}|[a-zA-Z0-9][a-df-zA-Z0-9][a-zA-Z0-9]{2}|[a-zA-Z0-9]{2}[a-km-zA-Z0-9][a-zA-Z0-9]|[a-zA-Z0-9]{3}[a-oq-zA-Z0-9])$
这应该是EFNet IRC网络上#unix
的新频道密钥。 :)
我要测试一下吗?你有什么事情......
当然我做了,但是用sed。一点点。大多数元字符必须被转义,oops:
$ sed -n -e '/^\([a-zA-Z0-9]\{1,3\}\|[a-zA-Z0-9]\{5,\}\|[a-gi-zA-Z0-9][a-zA-Z0-9]\{3\}\|[a-zA-Z0-9][a-df-zA-Z0-9][a-zA-Z0-9]\{2\}\|[a-zA-Z0-9]\{2\}[a-km-zA-Z0-9][a-zA-Z0-9]\|[a-zA-Z0-9]\{3\}[a-oq-zA-Z0-9]\)$/p'
a <- typed
a
aa <- typed
aa
aaa <-
aaa
aaaa <-
aaaa
aaaaa <-
aaaaa
help <- aha, no response from sed
aelp <-
aelp
helper <-
helper