This Confluence has been LDAP enabled, if you are an ASF Committer, please use your LDAP Credentials to login. Any problems file an INFRA jira ticket please.

Page tree
Skip to end of metadata
Go to start of metadata

Given the power and flexibility of mod_rewrite it's not surprising that people often use it as their golden hammer. Part of gaining knowledge about mod_rewrite is knowing when not to use it.

The following is a list of misuses of mod_rewrite and more appropriate (and often faster) alternatives. These examples assume the RewriteRules are not placed in a directory context (i.e., not in a .htaccess file nor in a <Directory> section).

Simple Redirects

RewriteRule ^/(.*) http://other.example.com/$1

# is better expressed as..
Redirect / http://other.example.com/

Complex Redirects

# redirect and drop the trailing uri
RewriteRule ^/.* http://other.example.com/

# is better expressed as.. (we only need to match every possible string 
# without storing it, thus just ^)
RedirectMatch ^ http://other.example.com/
# redirect to a uri containing a portion of the original
RewriteRule ^/foo/(.+)/bar http://other.example.com/$1

# is better expressed as..
RedirectMatch ^/foo/(.+)/bar http://other.example.com/$1

Appropriate uses of mod_rewrite for redirecting include:

  • Redirecting based on the query string
  • Redirecting based on other request details such as user-agent.

Aliasing

RewriteRule ^/foo/(.*) /bar/$1

# is better expressed as..
Alias /foo /var/www/bar

or

RewriteRule ^/foo/(.*)/baz /bar/$1

# is better expressed as..
AliasMatch /foo/(.*)/baz /var/www/bar/$1

Appropriate uses of mod_rewrite for aliasing include:

  • Aliasing based on complex rules

TODO, validate AliasMatch example, add more valid uses or expand them (smile)

Proxying

RewriteRule ^/(.*) http://other.example.com/$1 [P]

# is better expressed as..
ProxyPass / http://other.example.com/
# reverse proxy everything except images
RewriteCond %{REQUEST_URI} !^/images
RewriteRule ^/(.*) http://other.example.com/$1 [P]

# is better expressed as..
ProxyPass /images !
ProxyPass / http://other.example.com/
  • No labels