Как настроить редирект, чтобы при вводе адреса с префиксом www происходил переход на адрес без www?

Как исправить конфигурацию .htaccess, чтобы редирект с www на без www и удаление расширения .html работали корректно, так как при заходе на www.site.ru появляется ошибка 404?
  • 16 января 2024 г. 13:00
Ответы на вопрос 2
Для настройки редиректа с `www` на без `www` и удаления расширения `.html` в файлах Apache, вам необходимо использовать файл `.htaccess`, который должен быть размещён в корневой директории вашего сайта. Ниже приведу пример, как должно выглядеть содержимое файла `.htaccess` для выполнения данных задач.

```apache
RewriteEngine On

# Убедимся, что модуль mod_rewrite загружен
<IfModule mod_rewrite.c>

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

    # Удаление расширения .html
    # Чтобы внешне ссылки выглядели без расширения .html
    # Переадресация с пользовательского URL без .html на реальный URL с .html
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.html -f
    RewriteRule ^([^\.]+)$ $1.html [NC,L]
    
</IfModule>
```

Объяснение использованных директив:

- `RewriteEngine On` - включает использование модуля `mod_rewrite`.
- `RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]` - проверяет HTTP_HOST (то есть домен), начинается ли он с `www.`.
- `RewriteRule ^(.*)$ http://%1/$1 [R=301,L]` - если предыдущее условие верно, то делается 301 редирект (постоянный редирект) на URL без `www`.
- `RewriteCond %{REQUEST_FILENAME} !-d` - проверяет, что запрошенный URI не соответствует директории на сервере.
- `RewriteCond %{REQUEST_FILENAME}\.html -f` - проверяет, что запрошенный URI соответствует файлу с расширением `.html`.
- `RewriteRule ^([^\.]+)$ $1.html [NC,L]` - делает внутренний редирект, добавляя расширение `.html` к URL.

Не забудьте убедиться, что модуль `mod_rewrite` включён и разрешён в вашей конфигурации Apache.

Также может потребоваться проверить дополнительные настройки хостинга, чтобы убедиться, что для вашего домена корректно настроены записи DNS и что сервер конфигурации хостинга не конфликтует с использованием файла `.htaccess`.

В случае, если после применения вышеуказанных настроек переход на `www.site.ru` всё ещё приводит к ошибке 404, стоит проверить настройки DNS на вашем домене, а также убедиться, что нет конфликтующих правил в `.htaccess` или других конфигурационных файлах на сервере.
RewriteEngine On
RewriteBase /

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

# Редирект на удаление .html
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP/
RewriteRule ^([^.]+)\.html$ http://site.ru/$1 [R=301,L]
Похожие вопросы