Regex htaccess 301重定向的正则表达式挑战
我有许多类似的标记和类别URL,我想在一个干净的regex语句中重定向它们(如果可能的话)。示例URL为:Regex htaccess 301重定向的正则表达式挑战,regex,.htaccess,Regex,.htaccess,我有许多类似的标记和类别URL,我想在一个干净的regex语句中重定向它们(如果可能的话)。示例URL为: 表,th,td{ 边框:1px纯黑; } 统一资源定位地址 重定向到 /类别/类别名称-2/ /blog/category/categoryname/ /类别/类别名称-2/page/3/ /blog/category/categoryname/ /类别/类别名称/ /blog/category/categoryname/ /类别/类别名称/页码/3/ /blog/category/c
表,th,td{
边框:1px纯黑;
}
统一资源定位地址
重定向到
/类别/类别名称-2/
/blog/category/categoryname/
/类别/类别名称-2/page/3/
/blog/category/categoryname/
/类别/类别名称/
/blog/category/categoryname/
/类别/类别名称/页码/3/
/blog/category/categoryname/
/标记/标记名-2/
/blog/tag/tagname/
/标记/标记名-2/page/3/
/blog/tag/tagname/
/标记/标记名/
/blog/tag/tagname/
/标记/标记名/页面/3/
/blog/tag/tagname/
/blog/page/5/
/博客/
我想我知道了。我认为这涵盖了所有类别和标记重定向。*'我已经解释了我认为它在做什么,但可能是错误的,也许是偶然的解决方案,就像设计一样
此外,由于浏览器缓存和CDN缓存的原因,很难进行全面测试,但在隐姓埋名时似乎可以工作:
RedirectMatch 301 ^/(category|tag)/(([a-z]+)|([a-z]+-[a-z]+))(?:-2)?/(?:page/.*)?$ /blog/$1/$2/
(category | tag)
匹配单词category
或tag
。这将返回$1
(组1)
某些类别的名称中有一个-
;因此,我必须处理-2
(我们想要去掉)和真正的-
(我们想要保留)
([a-z]+)|([a-z]+-[a-z]+)
-返回组$2
。中间的<代码> <代码>表示要么返回“<代码> > <代码>或是什么之后。
([a-z]+)
-这将查找第一个未中断的文本块,即当它碰到数字或标点符号时停止(在本例中为a-
)
([a-z]+-[a-z]+)
-这将查找未中断的字符串,然后是连字符,然后是另一个未中断的字符串。这说明标记名带有连字符。如果连字符后面没有文本块,这将不会返回任何内容…这是我们希望发生的
(?:-2)?
这表示可能有-2。结尾的问号表示可能有,但如果没有就好了。括号内的?:表示忽略-2
,如果它在那里
(?:page/*)?
查找单词“page”及其后的任何内容,如果找到,则放入“ignore”组。结尾的问号表示不需要在那里
(([a-z]+)|([a-z]+-[a-z]+))(?:-2)?