Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex htaccess 301重定向的正则表达式挑战_Regex_.htaccess - Fatal编程技术网

Regex htaccess 301重定向的正则表达式挑战

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

我有许多类似的标记和类别URL,我想在一个干净的regex语句中重定向它们(如果可能的话)。示例URL为:

表,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)?