Lightweight, No database tables and no entity system overhead. Rules are stored in a single config object; hit counters use Drupal State. A single Symfony EventSubscriber fires on every request with minimal overhead.
The module detects whether the incoming request is a direct browser visit or an AJAX call (e.g., Drupal dialog or modal popup) and only redirects browser visits. AJAX requests always pass through unchanged, ensuring modals and dialogs continue to work perfectly.
Rules are stored as a single config object loaded into memory on every request, and matched by a linear scan. This makes the module fast and dependency-free for small rule sets
If you need to manage thousands of URLs (e.g., a large site migration), consider the Redirect contrib module which stores rules in an indexed database table.
| Feature | This Module | Redirect | Rabbit Hole |
|---|---|---|---|
| Storage | Config API (memory) | DB table (indexed) | DB (entity) |
| Scale | 50–500 rules | Tens of thousands | N/A |
| AJAX / modal passthrough | Yes | No | No |
| Redirects valid Drupal routes | Yes | No (warns/blocks) | No |
| Works on any path | Yes | Yes | No (entity types only) |
| Wildcard prefix matching | Yes (/solutions/*) |
No | No |
| Query string matching | Yes (/path?page=13) |
No | No |
| Query string passthrough | Yes | No | No |
| Role-based exclusions | Yes | No | No |
| Hit counter per rule | Yes | No | No |
| Path test tool | Yes | No | No |
| Loop / chain detection | Yes | Partial | No |
| CSV import / export | Yes | No | No |
| Per-rule enable / disable | Yes | No | No |
| Multilingual prefix support | Yes (auto-detected) | Partial | Partial |
| External URL destinations | No | Yes | No |
| Redirect 404 tracking | No | Yes (submodule) | No |
| Backend UI configuration | Yes | Yes | Yes |
| No database table required | Yes | No | No |
When to use this module
- You have fewer than 300–500 rules
- You need AJAX / modal passthrough (e.g., webforms embedded in dialogs)
- You need to redirect valid Drupal routes that the Redirect module refuses to handle
- You need wildcard, query string matching, or role-based exclusions
- You want a lightweight solution with no extra contrib dependency
- Drupal 9, 10, 11, or 12
drupal:usermodule (for role management in the admin UI)- No additional contrib modules required
Project information
Minimally maintained
Maintainers monitor issues, but fast responses are not guaranteed.Maintenance fixes only
Considered feature-complete by its maintainers.- Project categories: Search engine optimization (SEO)
- Created by thirstysix on , updated
Stable releases for this project are covered by the security advisory policy.
Look for the shield icon below.
