A rewrite engine is software located in a Web application framework running on a Web server that modifies a web URL's appearance. Many framework users have come to refer to this feature as a "Router". This modification is called URL rewriting. Rewritten URLs (sometimes known as short, pretty or fancy URLs, search engine friendly - SEF URLs, or slugs) are used to provide shorter and more relevant-looking links to web pages. The technique adds a layer of abstraction between the files used to generate a web page and the URL that is presented to the outside world.
Web sites with dynamic content use URLs that generate pages from the server using query string parameters. These are often rewritten to resemble URLs for static pages on a site with a subdirectory hierarchy. For example, the URL to a wiki page might be:
but can be rewritten as:
A blog might have a URL that encodes the dates of each entry:
It can be altered like this:
which also allows the user to change the URL to see all postings available in December, simply by removing the text encoding the day '19', as though navigating "up" a directory:
A site can pass specialized terms from the url to its search engine as a search term. This would allow users to search directly from their browser. For example, the URL as entered into the browser's location bar:
Will be urlencoded by the browser before it makes the http request. The server could rewrite this to:
Benefits and drawbacks
|This section possibly contains original research. (April 2013)|
There are several benefits to using a rewrite engine for URLs:
- The links are "cleaner" and more descriptive, improving their "friendliness" to both users and search engines.
- They prevent undesired "inline linking", which can waste bandwidth.
- The site can continue to use the same URLs even if the underlying technology used to serve them is changed (for example, switching to a new blogging engine).
There can, however be drawbacks as well; if a user wants to modify a URL to retrieve new data, the rewrite engine may hinder the construction of custom queries due to the lack of named variables. For example, it may be difficult to determine the date from the following format:
In this case, the original query string was more useful, since the query variables indicated month and day: