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

时间:2019-05-15 13:12:46

标签: regex .htaccess

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

所有文件夹都具有相同的名称结构(带有-或_的123名称名称),与BBEdit中的GREP匹配以下内容: (\d{3}(_|-).+)

所以我尝试了类似的方法: RedirectMatch 302 ^/([\d{3}(_|-).+)]/(.*)/?$ /subfolder/$2 与我要重定向的文件夹放在同一文件夹中。 我不知道如何正确设置比赛。

应在example.com/images/subfolder/123-name-name/somefile.pdf中找到类似example.com/images/123-name-name/somefile.pdf(或doc,docx)的URL

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

如果有人可以帮助我,那就太好了。

1 个答案:

答案 0 :(得分:1)

您可以使用:

^(.*?\/\d{3}(?:-|_)\w+(?:-|_)\w+\/)(.*)$

捕获捕获组中URL的两个部分,并替换为$1kunden/$2,因此您的行将如下所示:

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

这将在其余网址和文件名之间插入kunden/

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

^(.*?\/\d{3}(?:-|_)\w+(?:-|_)\w+\/)(.*?\..*?)$

编辑,不好的是,为防止递归,您可以使用负数预读来确保子文件夹在路径中不存在:

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

这将防止已经包含subfolder/的网址再次重定向。