Как правильно настроить RewriteRule для поддомена game.site.com
При настройке веб-сервера на базе Apache часто возникает задача перенаправить все запросы на поддомене на единый обработчик. В вашем случае домен game.site.com должен корректно обрабатывать URL вида game.site.com, game.site.com/maincraft, game.site.com/maincraft/, game.site.com/maincraft/step1/, а также game.site.com/maincraft/?id=1&g=2 и game.site.com/step1/?id=1&g=2. Проблема возникает из-за неправильного шаблона в правиле RewriteRule, а также из-за отсутствия обработки URL без слэша в конце. Разберём решение по шагам.
Почему ваше правило не работает?
Вы используете правило RewriteRule ^(.*)/$ game.php?slug_game=$1 [L,QSA]. Оно срабатывает только для URL, которые заканчиваются на слэш (например, /maincraft/). Для URL без слэша (/maincraft) или корневого адреса (/) правило не применяется. Кроме того, если в URL есть параметры запроса, они могут быть потеряны, если не использовать флаг QSA.
Правильное решение
Вам нужно обрабатывать все возможные варианты URL. Лучший способ - использовать одно универсальное правило, которое захватывает путь без слэша и с ним, а также передаёт параметры. Вот оптимальный код для файла .htaccess в корне поддомена:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^game\.site\.com$ [NC]
RewriteRule ^(.*?)/?$ game.php?slug_game=$1 [L,QSA]Это правило работает так: ^(.*?)/?$ - нежадный захват любого пути (включая пустой) и опциональный слэш в конце. Флаг QSA сохраняет все GET-параметры. Таким образом, обрабатываются все указанные вами варианты.
Обработка корневого URL
Для корневого адреса game.site.com (без пути) переменная $1 будет пустой. Чтобы это не вызывало ошибок, в скрипте game.php добавьте проверку: если slug_game пуст, загружайте главную страницу игры.
Дополнительные рекомендации
- Проверьте порядок правил: Убедитесь, что ваше правило находится до любых других RewriteRule, которые могут перехватывать запросы.
- Отключите MultiViews: Добавьте
Options -MultiViewsперед RewriteEngine On, чтобы избежать конфликтов с автоматическим сопоставлением URL. - Тестируйте с разными URL: Используйте онлайн-инструменты или локальный сервер для проверки всех вариантов, включая URL с параметрами.