Как настроить 301 редирект в файле .htaccess для перенаправления с версии сайта с www на версию без www?

Здравствуйте всем! <br/><br/> Поделитесь, пожалуйста, вашим мнением: где именно я могла допустить ошибку в настройке редиректа? Дело в том, что наш сайт переехал с домена .com на .ru, и я прописала следующую команду: <br/><pre><code># Перенаправление с mysite.com на mysite.ru
  RewriteCond %{HTTP_HOST} ^(www\.)?mysite\.com$ [NC]
  RewriteRule ^(.*)$ https://mysite.ru/$1 [R=301,L]</code></pre><br/> Однако, когда я пытаюсь настроить редирект с www на без www, возникает проблема и всё ломается... <br/><br/> Вот полный файл .htaccess: <br/><pre><code>Options -Indexes 
ErrorDocument 404 /404.php

&lt;IfModule mod_php5.c&gt;
  php_flag allow_call_time_pass_reference 1
  php_flag session.use_trans_sid off
  #php_value display_errors 1
  #php_value mbstring.internal_encoding UTF-8
&lt;/IfModule&gt;

&lt;IfModule mod_rewrite.c&gt;
  Options +FollowSymLinks
  RewriteEngine On
  RewriteBase /

  # Перенаправление с mysite.com на mysite.ru
  RewriteCond %{HTTP_HOST} ^(www\.)?mysite\.com$ [NC]
  RewriteRule ^(.*)$ https://mysite.ru/$1 [R=301,L]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
  RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
  
  RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
  RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index.php/?([^\ \?]*) [NC]
  RewriteRule ^ %1/%2 [R=301,L]
&lt;/IfModule&gt;

&lt;IfModule mod_dir.c&gt;
  DirectoryIndex index.php index.html
&lt;/IfModule&gt;

&lt;IfModule mod_expires.c&gt;
  ExpiresActive on
  ExpiresByType image/jpeg "access plus 3 day"
  ExpiresByType image/gif "access plus 3 day"
&lt;/IfModule&gt;</code></pre>
  • 27 марта 2025 г. 6:55
Ответы на вопрос 2
Чтобы настроить 301 редирект с версии сайта с www на версию без www в вашем файле `.htaccess`, вы можете добавить следующие строки кода перед любыми другими правилами редиректа, чтобы они обрабатывались в правильном порядке.

Вот пример, как это сделать:

```apache
<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteBase /

  # Редирект с www на без www
  RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
  RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

  # Перенаправление с mysite.com на mysite.ru
  RewriteCond %{HTTP_HOST} ^(www\.)?mysite\.com$ [NC]
  RewriteRule ^(.*)$ https://mysite.ru/$1 [R=301,L]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
  RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

  RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
  RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index.php/?([^\ \?]*) [NC]
  RewriteRule ^ %1/%2 [R=301,L]
</IfModule>
```

### Объяснение изменений:

1. **Редирект с www на без www**:
   - `RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]`: Условие проверяет, начинается ли хост с `www.`. Если да, то захватывает остальную часть хоста с помощью `(.*)`.
   - `RewriteRule ^(.*)$ https://%1/$1 [R=301,L]`: Правило перенаправляет все запросы на аналогичный URL, но без `www.` (где `%1` — это часть, захваченная в предыдущем условии).

### Место вставки:
Убедитесь, что новые строки кода добавлены **перед** другими правилами редиректов, чтобы избежать конфликтов в правилах и обеспечить правильный порядок обработки запросов.

### Проверка работы редиректов:
После внесения изменений не забудьте проверить работу редиректов:
- Перейдите на URL с `www` и убедитесь, что он перенаправляет на URL без `www`.
- Также проверьте, что все другие ваши редиректы работают, как ожидается.
Суть в том, что сайт переехал с .com на .ru, соответствующую команду прописала

А при чем тут .com в .htaccess? У вас хост на .com еще резолвится?

Как настроить 301 редирект .htaccess: www на без www?

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Похожие вопросы