Как убрать .html из URL и настроить ЧПУ через htaccess

    Владельцы сайтов на статичном HTML часто сталкиваются с проблемой: страницы открываются с расширением .html, а хочется видеть в адресной строке короткие ЧПУ (человеко-понятные URL) без лишних символов. Например, вместо https://sitename.ru/about.html - https://sitename.ru/about/. В этой статье мы разберём, как правильно настроить файл .htaccess, чтобы убрать .html из URL, организовать редиректы и избежать бесконечных циклов вроде .html.html.html.

    Почему возникает ошибка с повторением .html?

    Проблема бесконечных расширений (например, page.html.html.html) возникает из-за некорректной цепочки правил в .htaccess. Когда сервер не находит файл по запросу /abbout/, он пытается подставить .html, но из-за отсутствия проверки на уже существующее расширение редирект зацикливается. В итоге браузер выдаёт ошибку или бесконечный URL.

    Пошаговая настройка .htaccess для удаления .html

    1. Включаем модуль RewriteEngine

    Убедитесь, что на сервере включён mod_rewrite. Добавьте в начало файла:

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /

    2. Редирект с .html на URL без расширения

    Это правило перехватывает запросы, содержащие .html, и перенаправляет на чистый URL с кодом 301 (постоянный редирект):

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
    RewriteRule ^([^.]+)\.html$ /$1/ [R=301,L]

    3. Внутренняя подстановка .html при запросе папки

    Когда пользователь заходит на /about/, сервер должен отдать файл about.html, не меняя URL. Для этого используем:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)/$ /$1.html [L]

    4. Защита от циклических редиректов

    Добавьте проверку, что файл действительно существует:

    RewriteCond %{REQUEST_FILENAME}.html -f
    RewriteRule ^(.+?)/?$ /$1.html [L]

    Полный рабочий код .htaccess

    Скопируйте этот проверенный код в корневой файл .htaccess вашего сайта:

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    
    # Редирект с .html на /
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
    RewriteRule ^([^.]+)\.html$ /$1/ [R=301,L]
    
    # Подстановка .html для ЧПУ
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME}.html -f
    RewriteRule ^(.+?)/?$ /$1.html [L]
    
    # Страницы ошибок
    ErrorDocument 404 /error_404.html

    Что делать, если сайт на PHP или CMS?

    Если ваш проект использует PHP (например, WordPress или самописный движок), описанный метод может конфликтовать с маршрутизацией. В таких случаях лучше использовать плагины (Yoast SEO, Rank Math) или встроенные настройки ЧПУ. Для статического HTML этот способ - самый надёжный.

    Как проверить правильность настройки?

    • Откройте любую страницу вида /about/ - она должна загружаться без .html.
    • Попробуйте ввести неверный адрес - должна появиться страница 404.
    • Убедитесь, что нет циклических редиректов (инструменты вроде Redirect Checker).

    Настройка ЧПУ улучшает юзабилити и SEO сайта. Короткие URL без расширений лучше индексируются поисковиками и выглядят привлекательнее для пользователей.

    Часто задаваемые вопросы