Regex 如何使用htaccess和GREP将文件夹请求重定向到子文件夹

Regex 如何使用htaccess和GREP将文件夹请求重定向到子文件夹,regex,.htaccess,Regex,.htaccess,我有大约200个包含PDF和文档的文件夹。它们都应重定向到同一目录中的子文件夹。同一目录中也有不应包含的文件夹和文件 所有文件夹都具有相同的名称结构(123个名称,带-或uu混合),与BBEdit中的GREP匹配: (\d{3}(124;-).+) 所以我尝试了以下方法: RedirectMatch 302^/([\d{3}(124;-).+)]/(.*)/?$/子文件夹/$2 与我要重定向的文件夹放在同一个文件夹中。 我不知道如何正确地安排比赛 类似example.com/images/123

我有大约200个包含PDF和文档的文件夹。它们都应重定向到同一目录中的子文件夹。同一目录中也有不应包含的文件夹和文件

所有文件夹都具有相同的名称结构(123个名称,带-或uu混合),与BBEdit中的GREP匹配:
(\d{3}(124;-).+)

所以我尝试了以下方法:
RedirectMatch 302^/([\d{3}(124;-).+)]/(.*)/?$/子文件夹/$2
与我要重定向的文件夹放在同一个文件夹中。 我不知道如何正确地安排比赛

类似example.com/images/123-name-name/somefile.pdf(或doc,docx)的URL应位于example.com/images/subfolder/123-name-name/somefile.pdf

但是上面的代码会导致内部服务器错误

如果有人能在这方面帮助我,那就太好了。

您可以使用:

^(.*?\/\d{3}(?:-|_)\w+(?:-|_)\w+\/)(.*)$
要在捕获组中捕获url的两个部分,并替换为
$1kunden/$2
,您的行将如下所示:

RedirectMatch 302 ^(.*?\/\d{3}(?:-|_)\w+(?:-|_)\w+\/)(.*)$ $1kunden/$2
这将在url的其余部分和文件名之间插入
kunden/

如果要指定文件名必须具有扩展名(即,至少包含1个
),可以将正则表达式替换为:

^(.*?\/\d{3}(?:-|_)\w+(?:-|_)\w+\/)(.*?\..*?)$
编辑My bad,为了防止递归,您可以使用负前瞻来确保路径中不存在子文件夹:

RedirectMatch 302 ^((?!.*subfolder\/).*?\/)(\d{3}(?:-|_)\w+(?:-|_)\w+\/)(.*)$ $1subfolder/$2$3

这将防止已包含
子文件夹的url重新重定向。

太好了!这对我帮助很大。我只是需要稍微改变一下顺序,因为我需要example.com/images/subfolder/123-name-name。。。因此,我的结果是:
RedirectMatch 302^(.*?\/)(\d{3}(?:-| \uU)\ w+(?:-| \uUw+\/)(.*)$$1subfolder/$2$3
非常感谢!隐马尔可夫模型。。。现在在一台真正的服务器上进行了测试,由于无休止地执行代码而出现错误。重定向的结果是
/images/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/subfolder/112 Name/full path.txt
。那是什么原因?万岁!很好!你无法想象这对我有多大帮助。而且。。。啊。。。我现在明白为什么重定向是重复的。。。我以前对此一无所知。再次感谢!