Как сделать ЧПУ URL для сообществ на PHP через .htaccess

    Вы разрабатываете сайт на PHP с функцией сообществ и хотите заменить ссылки вида community.php?author=...&name=... на человеко-понятные URL - community/author/name. Это не только улучшает юзабилити, но и положительно влияет на SEO. Однако при попытке настроить rewrite через .htaccess вы сталкиваетесь с ошибкой 404. В этой статье мы разберём корректную конфигурацию и частые причины неработоспособности.

    Почему возникает ошибка 404 при rewrite?

    Самая распространённая причина - отсутствие включённого модуля mod_rewrite на сервере Apache. Даже если правило в .htaccess написано верно, без этого модуля перенаправления не сработают. Проверьте, что в конфигурации Apache (httpd.conf или apache2.conf) раскомментирована строка LoadModule rewrite_module modules/mod_rewrite.so.

    Проверка включения mod_rewrite

    • Создайте файл info.php с кодом <?php phpinfo(); ?>.
    • Откройте его в браузере и найдите раздел mod_rewrite - если он отсутствует, модуль не активен.
    • На виртуальном хостинге обратитесь в техподдержку для включения модуля.

    Корректный код .htaccess для ЧПУ

    После включения модуля убедитесь, что ваш .htaccess расположен в корне сайта (или в папке /communities/, если вы используете RewriteBase /communities/). Вот рабочий пример:

    RewriteEngine On
    RewriteBase /
    RewriteRule ^community/([^/]+)/([^/]+)$ community.php?author=$1&name=$2 [L,QSA]

    Флаг QSA (Query String Append) добавляет существующие GET-параметры к новому URL, если они есть. Флаг L означает последнее правило - после его применения другие правила не выполняются.

    Настройка PHP для приёма ЧПУ

    Ваш файл community.php должен корректно извлекать параметры из суперглобального массива $_GET. Убедитесь, что вы используете правильные имена ключей (в примере - author и name). Если после rewrite параметры не приходят, проверьте, не экранируются ли слэши в ссылке - они могут быть преобразованы сервером.

    Тестовый код community.php

    <?php
        $author = isset($_GET['author']) ? htmlspecialchars($_GET['author']) : 'Не указан';
        $name   = isset($_GET['name']) ? htmlspecialchars($_GET['name']) : 'Не указан';
        echo "Автор: " . $author . "<br>Имя сообщества: " . $name;
    ?>

    Использование htmlspecialchars защищает от XSS-атак при выводе данных.

    Частые ошибки и их решение

    Ошибка 403 Forbidden

    Возникает, если в .htaccess нет директивы AllowOverride All в конфигурации виртуального хоста. Добавьте в <Directory> соответствующую настройку.

    Путь к файлу community.php

    Если community.php лежит не в корне, а в подпапке, укажите правильный путь в RewriteRule. Например, если файл находится в /communities/community.php, правило должно быть: RewriteRule ^community/([^/]+)/([^/]+)$ /communities/community.php?author=$1&name=$2 [L].

    Заключение

    Настройка ЧПУ для сообществ на PHP - задача, решаемая с помощью mod_rewrite и правильного синтаксиса .htaccess. Проверьте включение модуля, расположение файлов и флаги в правиле. После исправления этих моментов ссылки вида community/author/name начнут работать, а ошибка 404 исчезнет.

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