Как создать редирект с использованием регулярных выражений в файле htaccess?

Здравствуйте! Подскажите, как можно настроить 301 редиректы с адресов, таких как <br/> <a href="https://site.ru/index.php?route=product/select_pr&amp;whwidth_listv=a41b1903&amp;whwidth_id=a41b1903e" rel="nofollow">https://site.ru/index.php?route=product/select_pr&amp;...</a> на адреса, например, <br/> <a href="https://site.ru/select-product.htm&amp;whwidth_listv=a41b1903&amp;whwidth_id=a41b1903e" rel="nofollow">https://site.ru/select-product.htm&amp;whwidth_listv=a...</a>?
  • 17 ноября 2024 г. 4:53
Ответы на вопрос 2
Чтобы создать редирект с помощью регулярных выражений в файле `.htaccess`, вы можете использовать модуль `mod_rewrite`. Для вашего случая вам нужно будет выполнить следующий набор действий:

1. Убедитесь, что модуль `mod_rewrite` включен на вашем сервере.
2. Добавьте правила редиректа в файл `.htaccess` в корневой директории вашего сайта.

Пример конфигурации, который будет перенаправлять запросы с адреса, подобного вашему примеру, на новый адрес:

```apache
RewriteEngine On

# 301 редирект с учетом параметров запроса
RewriteCond %{QUERY_STRING} ^route=product/select_pr&whwidth_listv=([^&]*)&whwidth_id=([^&]*)$ [NC]
RewriteRule ^index\.php$ /select-product.htm?whwidth_listv=$1&whwidth_id=$2 [R=301,L]
```

### Объяснение:
- `RewriteEngine On`: Включает модуль `mod_rewrite`.
- `RewriteCond`: Условие для проверки, если строка запроса (query string) соответствует регулярному выражению:
  - `^route=product/select_pr&whwidth_listv=([^&]*)&whwidth_id=([^&]*)$` означает, что строка запроса должна начинаться с `route=product/select_pr` и иметь два параметра `whwidth_listv` и `whwidth_id`.
  - `([^&]*)` позволяет захватить значения этих параметров.
- `RewriteRule`: Осуществляет редирект, если условия выполнены:
  - `^index\.php$` означает, что правило применимо к запросам к `index.php`.
  - `/select-product.htm?whwidth_listv=$1&whwidth_id=$2` указывает, на какой адрес будет осуществлен редирект с передачей захваченных значений параметров через `$1` и `$2`.
  - `[R=301,L]` означает, что это постоянный редирект (301) и это последнее правило, которое нужно применить, если условие выполнено.

Сохраните изменения в `.htaccess` и проверьте, работает ли редирект так, как ожидалось.
https://site.ru/select-product.htm&whwidth_listv=a41b1903&whwidth_id=a41b1903e
RewriteCond %{QUERY_STRING} (?:^|&)route\=product/select_pr(?:$|&)
RewriteCond %{QUERY_STRING} (?:^|&)whwidth_listv\=a41b1903(?:$|&)
RewriteCond %{QUERY_STRING} (?:^|&)whwidth_id\=a41b1903e(?:$|&)
RewriteRule ^index\.php$ /select\-product.htm&whwidth_listv=a41b1903&whwidth_id=a41b1903e? [L,R=301]


Осталось разобраться с переменной
1. вместо переменной части ставим скобками переменную (/+)
А вместо нее внизу вставляем %1 - не опечатка это не бакс а процент
бакс был бы с самого RewriteRule а нам нужно взять из RewriteCond
Похожие вопросы