Итак, в Apache за редирект отвечают директивы, прописываемые в двух разных модулях: mod_alias и mod_rewrite. Через mod_alias обычно делают более простые редиректы, выглядят они примерно так:
Redirect 301 /one https://site.com/two
Redirect permanent /one https://site.com/two
RedirectPermanent /one https://site.com/two
RedirectMatch 301 ^/\d+-(\w+)/(.*)$ /$1/$2
Через mod_rewrite можно прописать более сложный редирект, с использованием условий редиректа:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site\.com
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^index2\.php$ /index.php [R=301,L]
Вторая и третья строки - это условия редиректа, в данном случае редирект выполняется, если выполнены оба условия. Если требуется сделать редирект при выполнении хотя бы одного условия, то в конце первого условия через пробел пишут флаг [OR].
Четвёртая строка – тоже условие, но оно не сработает, потому что закомментировано символом #.
Последняя строка – это правило редиректа. Флаг [R] означает, что должен произойти внешний редирект (через браузер) на данный URL, в противном случае произойдёт рерайт адреса на внутренний файл сервера. Если написать R вместо R=301, то произойдёт редирект 302. Флаг [L] означает, что обработка данной последовательности директив закончена.
В качестве условий и входящего пути правила подразумеваются регулярные выражения, поэтому не забывайте экранировать спецсимволы регулярок обратным слэшем: \.
Обратите внимание, что входящий путь правила mod_alias начинается со слэша (/index.php), а входящий путь правила mod_rewrite – без слэша в начале (index2\.php).