Как перенаправить запрос папки в подпапку с помощью htaccess и GREP - PullRequest
1 голос
/ 15 мая 2019

У меня есть около 200 папок, которые содержат PDF и документы. Все они должны быть перенаправлены в подпапку в одном каталоге. В одном каталоге также находятся папки и файлы, которые не должны.

Все папки имеют одинаковую структуру имен (123-name-name with - или _ mixed), которые соответствуют следующему с GREP в BBEdit: (\d{3}(_|-).+)

Итак, я попробовал что-то вроде: RedirectMatch 302 ^/([\d{3}(_|-).+)]/(.*)/?$ /subfolder/$2 помещены в ту же папку, что и те, которые я хочу перенаправить. Я понятия не имею, как правильно установить соответствие.

URL-адрес, например example.com/images/123-name-name/somefile.pdf (или doc, docx), должен быть найден по адресу example.com/images/subfolder/123-name-name/somefile.pdf*1009. *

Но приведенный выше код приводит к внутренней ошибке сервера.

Было бы здорово, если бы кто-то мог помочь мне в этом.

1 Ответ

1 голос
/ 15 мая 2019

Вы можете использовать:

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

, чтобы захватить обе части URL в группах захвата, и заменить на $1kunden/$2, чтобы ваша строка выглядела как:

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

Это вставит kunden/ между остальной частью URL и именем файла.

Если вы хотите указать, что имя файла должно иметь расширение (т.е. включать по крайней мере 1 .), вы можете заменитьрегулярное выражение с:

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

РЕДАКТИРОВАТЬ Мое плохое, чтобы предотвратить рекурсию, вы можете использовать отрицательный прогноз, чтобы убедиться, что подпапка еще не существует в пути:

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

Это предотвратит повторное перенаправление URL, который уже содержит subfolder/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...