求助:Django中用正则统一匹配末尾含固定字符串的URL
解决统一匹配固定结尾URL的重定向问题
嘿,我来帮你搞定这个重定向的问题!你的需求是统一匹配所有以/the-same-string结尾(无末尾斜杠)的URL,之前的正则没生效是因为它们的匹配逻辑有问题,我来拆解下:
- 你写的第一个正则
^[a-zA-Z0-9_]+/the-same-string只能匹配单级路径+固定字符串的情况(比如/abc/the-same-string),但像/some-of-my-urls/the-same-string这种多级路径就匹配不到——因为[a-zA-Z0-9_]+只能匹配不含斜杠的一段字符,没法覆盖带斜杠的多级路径。 - 第二个正则
^./the-same-string里的.是正则里的特殊字符,意思是匹配任意单个字符,而不是任意长度的字符序列,所以它只能匹配类似/x/the-same-string这种前面只有一个字符的URL,自然也不符合你的需求。
正确的正则规则
你需要的是能匹配任意多级路径+固定结尾字符串的正则,直接用这个就可以:
url(r'^.+/the-same-string$', redirect_func),
我来解释下这个正则的每个部分:
^:匹配URL的起始位置,确保从开头开始匹配.+:匹配任意字符(除了换行符)1次或多次,这样就能覆盖所有多级路径的情况/the-same-string:你要匹配的固定结尾字符串$:匹配URL的结束位置,确保URL正好以/the-same-string结尾,不会匹配到后面还有额外内容的URL(比如/the-same-string/extra)
额外提示
如果之后你的URL可能偶尔出现末尾带斜杠的情况,可以把正则调整为兼容可选斜杠的版本:
url(r'^.+/the-same-string/?$', redirect_func),
这里的/?表示斜杠是可选的,既匹配/the-same-string也匹配/the-same-string/。
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

