hryvinskyi / magento2-store-matcher
Automatic store/website code matcher for multi-store Magento 2 setup based on HTTP_HOST
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/hryvinskyi/magento2-store-matcher
Requires
- php: >=8.1
README
Automatic store/website code matcher for multi-store Magento 2 / Adobe Commerce setups based on HTTP_HOST.
Overview
This Composer package automatically sets the correct Magento store or website code based on the incoming HTTP_HOST header,
eliminating the need to manually configure store matching in pub/index.php.
Features
- Zero configuration - Works automatically after installation
- Performance optimized - Stores/Websites can be cached by opcache (static array in app/etc/store-hosts.php)
- Local overrides - Support for environment-specific configuration
- Composer autoload - Uses standard Composer autoload mechanism
Installation
- Run the following Composer command in your Magento 2 / Adobe Commerce project root:
composer require hryvinskyi/magento2-store-matcher
The post-install script will automatically create app/etc/store-hosts.php and app/etc/store-hosts.local.php if they don't exist.
Configuration
Main Configuration
Edit app/etc/store-hosts.php to define your store and website host mappings:
return [ 'store' => [ 'default' => ['www.example.com', 'example.com'], 'french' => ['fr.example.com', 'french.example.com'], 'german' => ['de.example.com', 'german.example.com'], // ... more stores ], 'website' => [ 'base' => ['www.example.com'], 'europe' => ['eu.example.com'], // ... more websites ], ];
Local Overrides
For environment-specific configuration, create app/etc/store-hosts.local.php:
return [ 'store' => [ 'default' => ['test.example.test', 'localhost'], 'en_store' => ['en.example.test'], ], ];
This file will be automatically merged with the main configuration and can be gitignored.
How It Works
- Composer's autoload mechanism loads
src/autoload.phpon every request - The autoload file checks if running in web context (not CLI)
- It calls
StoreMatcher::match()which contains all the matching logic - The matcher loads configuration from
app/etc/store-hosts.php - It modifies
$_SERVERwithPARAM_RUN_TYPEandPARAM_RUN_CODE - Magento bootstrap uses these values to determine the store/website
Requirements
- PHP >= 8.1
- Magento 2.4+
License
MIT
Author
Volodymyr Hryvinskyi volodymyr@hryvinskyi.com