Как настроить 301 редирект для всех страниц типа /folder/1-2/p1.php, /folder/1-2/3-4/p1.php и так далее, чтобы они перенаправлялись на /folder/p1/?

Как настроить редирект для структуры URL, чтобы преобразовать многоуровневые пути в короткие URL-адреса вида "/folder/p1/" вместо "/folder/1-2/p1.php" и т. д.? Моя текущая попытка с помощью RewriteRule не срабатывает.
  • 7 февраля 2024 г. 9:08
Ответы на вопрос 2
Для настройки редиректа 301 для всех страниц со структурой URL вида `/folder/1-2/p1.php`, `/folder/1-2/3-4/p1.php` и так далее, где `/folder/` является постоянным компонентом, а последующие сегменты могут быть различными, можно использовать следующий `RewriteRule` в файле `.htaccess`, который должен быть размещён в корне вашего сайта:

```apache
RewriteEngine On
RewriteRule ^folder/(.+)/p1\.php$ /folder/p1/ [R=301,L]
```

Это правило будет работать следующим образом:

- `^folder/(.+)/p1\.php$` — этот паттерн поиска соответствует URL, начинающемуся на `/folder/`, за которым следует один или более любых символов (`.+`), затем `/p1.php`. Символ доллара (`$`) в конце гарантирует, что строка точно заканчивается на `/p1.php`.
- `(.+)` — скобки создают подмаску, которая позволяет ссылаться на часть адреса URL, которая совпадает с паттерном внутри скобок, но в данном случае нам не нужно ссылаться на эту часть URL, поэтому эту подмаску можно опустить.
- `[R=301,L]` — флаги для правила, где `R=301` означает перенаправление с HTTP статусом 301 (Moved Permanently), а `L` означает, что это последнее правило, которое будет обработано, если текущий запрос совпадает с паттерном.

Если вы хотите сделать редирект, игнорируя наличие и количество промежуточных подпапок, следующее правило сработает по-другому:

```apache
RewriteEngine On
RewriteRule ^folder/.+/p1\.php$ /folder/p1/ [R=301,L]
```

Здесь `^folder/.+/p1\.php$` соответствует любому URL, который начинается на `/folder/`, имеет любой путь (как минимум один символ, обозначенный `.+`) и заканчивается на `/p1.php`. При совпадении любой URL с этим паттерном будет перенаправлен на `/folder/p1/`.

Учтите, что изменения в файле .htaccess могут потребовать некоторого времени для применения, особенно если используется кэширование, и не забудьте очистить кэш браузера для тестирования, так как старые редиректы могут сохраняться в кэше браузера.
RewriteEngine On
# /folder/ => /folder/file-name/
RewriteCond %{REQUEST_URI} ^/folder/.+/(p[0-9]+)\.php$
RewriteRule ^folder/.+/(p[0-9]+)\.php$ /folder/%1/ [R=301,L]
Похожие вопросы