Rewrite, Redirect or Alias

An internal rewrite serves another resource under the same URL, and the browser never knows. An external redirect answers 3xx with a Location header, and the browser asks again. An alias (Alias, mod_alias) publishes a directory outside DocumentRoot and is not allowed in .htaccess; Redirect and RedirectMatch are. The manual ("When NOT to use mod_rewrite") prefers mod_alias whenever it suffices (Redirect and RedirectMatch); mod_rewrite is for decisions that depend on more than the path. Never let both act on one URL:

Two rewrites, a redirect, and a clash between modulesApache config
RewriteEngine On
Redirect 301 /old-page /new-page
RewriteRule ^old-page$ show.php?from=rewrite [L]
RewriteRule ^about$ show.php?page=about [L]
RewriteRule ^contact$ /show.php?page=contact [R=302,L]
Output
$ t /about /contact /old-page
/about                200  {"page":"about"}
/contact              302 http://example.com/show.php?page=contact
/old-page             301 http://example.com/new-page?from=rewrite

/about reached show.php while the address bar keeps /about. /old-page is the clash: in .htaccess both modules act in the late fixup phase, the rewrite ran first and replaced the query string, and Redirect then fired on the original path and carried the rewritten query along. In a virtual host, mod_rewrite acts earlier, at URL translation.