A WordPress redirect manager shouldn’t need its own database tables, an options page with nine tabs, and a few hundred milliseconds of your time to first byte. The Redirect Manager module in Dynamic Functionalities stores every redirect in a single JSON file, resolves exact matches in constant time, and counts hits without slowing the redirect down.
It currently handles the redirects on my own site. The screenshot below shows a single wildcard rule that has fired 6,611 times, and the hit counter costs visitors nothing because it’s written after the redirect response is already on its way.

Setting Up Your First Redirect
Enable the module, type a source path in From URL, a destination in To URL, pick a type, and click Add Redirect. The From field takes a relative path like /old-page; the To field accepts a relative path or a full URL. Each redirect gets an on/off checkbox, so you can pause a rule without deleting it or losing its hit count.
Redirect Types: 301, 302, 307, 308
Use a 301 when content has moved permanently, because that’s the signal that passes SEO value to the new URL. The module supports all four standard types:
| Code | Meaning | When to use it |
|---|---|---|
| 301 | Permanent | Content moved for good; search engines transfer ranking signals |
| 302 | Temporary | Short-term moves, A/B tests, campaign URLs |
| 307 | Temporary (method-safe) | Like 302, but POST requests stay POST |
| 308 | Permanent (method-safe) | Like 301, but preserves the request method |
Wildcard Redirects
Add an asterisk at the end of a From URL and the rule matches every path under that prefix. Two examples:
/old-blog/*catches/old-blog/post-1,/old-blog/category/tech, and everything else under it/docs/v1/*catches/docs/v1/apiand/docs/v1/guide/intro
This is how you retire an entire section of a site with one rule instead of fifty. My guide on content pruning covers how to decide which URLs deserve a redirect and which should return a 410.
Query Strings and Redirect Loops
The matcher strips query strings before comparing, so /old-page?utm_source=newsletter still matches a rule for /old-page, and the original query string is passed through to the destination URL. Your campaign tracking survives the redirect.
The module also detects redirect loops twice: once when you try to save a rule that points at itself or chains back to an existing source, and again at runtime as a safety net.
Performance Under the Hood
This is the part that made me write the module in the first place. Everything is tuned so a redirect costs as close to nothing as WordPress allows:
- File-based storage: all rules live in
wp-content/functionalities/redirects.json, cached with a 12-hour transient - O(1) exact lookup: exact matches hit an indexed array, with wildcard scanning only as a fallback
- Early exit: hooks
template_redirectat priority 1 and skips all processing in the admin - Deferred hit counting: counters are written on PHP shutdown, after the visitor is already redirected
Import and Export
The Export JSON button downloads every rule with its hit counts, and Import JSON restores them. Moving redirects from a staging site to production, or migrating away from another redirect plugin, is one download and one upload.
Should I use a 301 or a 302 redirect?
Use a 301 when the move is permanent, because search engines consolidate ranking signals to the new URL. Use a 302 only when the original URL will come back, like a temporary campaign page or a test.
Do redirects slow down a WordPress site?
Plugin-based redirects add one lookup before WordPress renders the page. Redirect Manager keeps that lookup near zero with an indexed exact-match check, a 12-hour transient cache, and no database queries. Server-level redirects are still marginally faster, but you lose hit tracking and the convenience of managing rules in wp-admin.
How do I redirect an entire folder to a new location?
Create a rule with a trailing asterisk, like /old-section/* pointing at the new parent URL. Every path under /old-section/ then redirects with a single rule.
That covers the day-one modules. The next module group starts with Content Integrity, which watches your posts for accidental damage every time you hit Update.