Универсальный редирект API на PHP-контроллер через .htaccess
При разработке веб-сервисов часто возникает задача направить все входящие запросы к API на единый скрипт-обработчик. В вашем случае домен api.site.zone должен перенаправлять любые URL вида /Module/Version/Method/Object на /src/controller.php. Рассмотрим, как реализовать это универсально, без необходимости добавлять правило для каждого нового модуля.
Проблема текущего решения
Ваш текущий код .htaccess работает, но требует отдельной строки для каждого API-модуля (например, Retail/v1):
RewriteCond %{HTTP_HOST} api\.site\.zone$ [NC]
RewriteCond %{REQUEST_URI} ^/Retail/v1
RewriteRule ^(.*)$ /src/controller.php [L]Это неудобно при масштабировании - каждый новый модуль потребует правки файла. Нужно универсальное правило, которое перехватывает все запросы к домену API.
Универсальное решение для всех запросов
Чтобы перенаправлять любой запрос на домене api.site.zone в /src/controller.php, используйте следующий код:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^api\.site\.zone$ [NC]
RewriteRule ^(.*)$ /src/controller.php [L,QSA]Флаг QSA (Query String Append) сохраняет все GET-параметры исходного запроса, что важно для передачи данных в контроллер. Флаг L останавливает обработку правил после выполнения этого перенаправления.
Как это работает
Условие RewriteCond %{HTTP_HOST} проверяет, что запрос пришёл именно к домену api.site.zone. Правило RewriteRule захватывает весь путь запроса (^(.*)$) и передаёт управление скрипту /src/controller.php. Таким образом, любой URL - будь то /Retail/v1/getUser или /NewModule/v2/createOrder - будет обработан вашим PHP-скриптом.
Дополнительная настройка: передача пути в переменную
Если вам нужно передать исходный путь запроса в контроллер (например, для маршрутизации), используйте обратную ссылку $1:
RewriteRule ^(.*)$ /src/controller.php?path=$1 [L,QSA]В PHP вы получите $_GET['path'] со значением Retail/v1/getUser и сможете разобрать его на модуль, версию, метод и объект.
Возможные проблемы и их решение
Проверка включения mod_rewrite
Убедитесь, что на сервере Apache активирован модуль mod_rewrite. Если правила не работают, добавьте в начало файла .htaccess строку RewriteEngine On и проверьте наличие AllowOverride All в конфигурации виртуального хоста.
Исключение статических файлов
Если на домене api.site.zone есть статические ресурсы (изображения, CSS, JS), которые не нужно перенаправлять, добавьте условие исключения:
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|gif)$ [NC]
RewriteRule ^(.*)$ /src/controller.php?path=$1 [L,QSA]Заключение
Универсальный редирект всех API-запросов на единый контроллер - это простое и эффективное решение, которое избавляет от дублирования правил для каждого модуля. Используйте приведённый код в .htaccess, и ваш PHP-скрипт будет обрабатывать любые запросы к домену api.site.zone, экономя время на поддержке и масштабировании.