Как правильно настроить редирект с помощью файла .htaccess?

Здравствуйте. Я хотел бы настроить переадресацию с <code>https://domain2.ru</code> на <code>https://domain1.net</code> с использованием <code>.htaccess</code>. Важно, чтобы адреса, например, <code>https://domain2.ru/directory/name1/</code>, перенаправлялись на <code>https://domain1.net/directory/name1/</code>, сохраняя при этом внутреннюю структуру и наполнение сайтов, так как они идентичны за исключением домена. 

Я применил следующий код: 
<pre><code class="apache">RewriteEngine On

&lt;IfModule mod_rewrite.c&gt;
	RewriteCond %{HTTP_HOST} ^domain2\.ru$ [NC,QSA]
	RewriteRule ^(.*)$ https://domain1.net/$1 [L,R=301]
&lt;/IfModule&gt;</code></pre>
Однако вместо этого любой адрес <code>https://domain2.ru/.../.../</code> перенаправляется на корень сайта <code>https://domain1.net/</code>, и весь путь теряется. 

Как можно решить эту проблему?
  • 23 сентября 2024 г. 18:13
Ответы на вопрос 1
Вы на правильном пути, и ваш код практически корректен. Однако проблема может заключаться в условии или в том, как происходит перенаправление. 

Попробуйте следующий вариант кода для файла `.htaccess`:

```apache
RewriteEngine On

<IfModule mod_rewrite.c>
    RewriteCond %{HTTP_HOST} ^domain2\.ru$ [NC]
    RewriteRule ^(.*)$ https://domain1.net/$1 [L,R=301]
</IfModule>
```

Обратите внимание на следующие моменты:

1. **Перенаправление на основе HTTP_HOST**: Убедитесь, что используете правильное имя хоста. Проверьте, нет ли лишних знаков или пробелов в домене `domain2.ru`.

2. **Код состояния 301**: Убедитесь, что вы желаете выполнить постоянное перенаправление (301). Если это тест, то вы можете временно использовать `R=302`.

3. **Проверка на наличие других правил**: Если у вас есть другие правила в файле `.htaccess`, они могут влиять на поведение редиректа. Убедитесь, что нет конфликтующих правил, которые могут вызывать неправильное перенаправление.

4. **Кэширование**: Веб-браузеры могут кэшировать результаты 301 перенаправления. Если вы изменяли правила и не видите изменений, попробуйте очистить кэш браузера или использовать режим инкогнито.

5. **Если нужно учитывать www**: Если ваш сайт доступен с `www`, вы можете добавить дополнительное условие:

```apache
RewriteCond %{HTTP_HOST} ^www\.domain2\.ru$ [NC,OR]
RewriteCond %{HTTP_HOST} ^domain2\.ru$ [NC]
RewriteRule ^(.*)$ https://domain1.net/$1 [L,R=301]
```

Применив эти изменения, ваш редирект должен работать так, как вы хотите, сохраняя структуру URL.
Похожие вопросы