Apache mod_rewrite Introduction - Apache HTTP Server

Apache HTTP Server Version 2.0

Apache > HTTP Server > Documentation > Version 2.0

# Apache mod_rewrite Introduction

Available Languages: en

This document supplements the `mod_rewrite` reference documentation. It describes the basic concepts necessary for use of `mod_rewrite`. Other documents go into greater detail, but this doc should help the beginner get their feet wet.

### See also

- Module documentation
- Technical details
- Practical solutions to common problems

## Introduction

The Apache module `mod_rewrite` is a very powerful and sophisticated module which provides a way to do URL manipulations. With it, you can do nearly all types of URL rewriting that you may need. It is, however, somewhat complex, and may be intimidating to the beginner. There is also a tendency to treat rewrite rules as magic incantation, using them without actually understanding what they do.

This document attempts to give sufficient background so that what follows is understood, rather than just copied blindly.

## Regular Expressions

Basic regex building blocks

## RewriteRule basics

Basic anatomy of a RewriteRule, with exhaustively annotated simple examples.

## Rewrite Flags

Discussion of the flags to RewriteRule, and when and why one might use them.

## Rewrite conditions

Discussion of RewriteCond, looping, and other related concepts.

## Rewrite maps

Discussion of RewriteMap, including simple, but heavily annotated, examples.

## .htaccess files

Discussion of the differences between rewrite rules in httpd.conf and in .htaccess files.

## Environment Variables

This module keeps track of two additional (non-standard) CGI/SSI environment variables named `SCRIPT_URL` and `SCRIPT_URI`. These contain the logical Web-view to the current resource, while the standard CGI/SSI variables `SCRIPT_NAME` and `SCRIPT_FILENAME` contain the physical System-view.

Notice: These variables hold the URI/URL as they were initially requested, i.e., before any rewriting. This is important because the rewriting process is primarily used to rewrite logical URLs to physical pathnames.

### Example

    SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html
    SCRIPT_FILENAME=/u/rse/.www/index.html
    SCRIPT_URL=/u/rse/
    SCRIPT_URI=http://en1.engelschall.com/u/rse/

Available Languages: en