WoluTools

Web · Browser tool

Generate .htaccess and nginx redirects from a URL list

Paste old and new URL pairs below. The rules for Apache, nginx, Netlify, Vercel or Cloudflare are written as you type, and loops and chains are flagged before you go live.

Free, no daily limitNo account, nothing uploaded

Open the full-page workspace

Old and new URLs

Status code
Query string

Generated rules


Checks

SeverityWhereWhat was found

The example list contains a loop, a chain and a conflicting duplicate on purpose, so you can see how each one is reported. Press Clear and paste your own pairs.

What you get for each host

The same list of pairs, written in five formats. Pick one in the Output format menu and the rules change in place.

Apache
.htaccess
RewriteRule lines inside an IfModule block, for the site root. Dots and other regex characters in the old path are escaped.
nginx
redirects.conf
One location = exact match per path, placed inside the server block. Old URLs with a query string get a map on $request_uri.
Netlify
_redirects
Aligned columns: old path, new URL, status code. Save it in the publish directory.
Vercel
vercel.json
A redirects array with statusCode, so the code you picked is kept. Merge it into your existing file.
Cloudflare
bulk-redirects.csv
A bulk redirect list with full URLs on both sides. Paths are prefixed with the site origin you enter.

What the checks look for

Before the rules go live

Query strings behave differently on each host

Apache appends the incoming query string unless the rule has QSD. nginx drops it unless $is_args$args is added. Netlify and Vercel pass it on by default, and Cloudflare has a switch per rule. The query string checkbox sets the matching option in every format. When an old URL has its own query string, such as /info.php?id=42, the rule also has to match on it: Apache gets a RewriteCond, nginx a map, Vercel a has clause and Netlify the parameter as an extra field.

What the checks cannot see

The rules are compared with each other, not with your live site. A redirect to a page that returns 404 looks fine here, and catch-all rules already on your server are invisible to the tool. Try a large batch on a staging host first and open a few old addresses in the browser.

Free, and nothing to expire

This is one of the 37 WoluTools tools that run entirely in your browser. Your URL list is not sent to a server and nothing is stored, so there is no job count and no result that expires.

Questions before you run it

Which formats does the generator write?

Apache .htaccess with RewriteRule lines, nginx with location = blocks, Netlify _redirects, a vercel.json redirects array and a Cloudflare bulk redirect CSV. All five are built from the same list of pairs.

How do I enter my URLs?

One pair per line, old URL first, separated by a comma, a tab or an arrow. Paths start with a slash; full http and https URLs work too. Two columns copied from a spreadsheet paste as tab-separated lines. A header row such as old,new and lines starting with # are skipped.

What happens with redirect chains and loops?

A chain is /a to /b to /c, which costs visitors and crawlers an extra request per hop. The tool lists each chain and the Flatten chains button points /a straight at /c. A loop such as /a to /b and back never resolves, so it is marked as breaking.

Does it handle query strings?

Yes. A checkbox decides whether the incoming query string is carried over to the new URL, and each format gets the matching setting. Old URLs that contain their own query string get a rule that matches on it.

Is my URL list sent to a server?

No. The rules are generated in the page and your URLs never leave your device. That also means the tool cannot tell whether a target page exists.