Redirect URLs with the Apache Web Server

Traducciones al Español
Estamos traduciendo nuestros guías y tutoriales al Español. Es posible que usted esté viendo una traducción generada automáticamente. Estamos trabajando con traductores profesionales para verificar las traducciones de nuestro sitio web. Este proyecto es un trabajo en curso.
Create a Linode account to try this guide with a $ credit.
This credit will be applied to any valid services used during your first  days.

In this guide, you’ll learn how to redirect URLs with Apache. Redirecting a URL allows you to return an HTTP status code that directs the client to a different URL, making it useful for cases in which you’ve moved a piece of content. Redirect is part of Apache’s mod_alias module.

Before You Begin

  1. This guide assumes you have followed our Creating a Compute Instance and Setting Up and Securing a Compute Instance guide, and that you have already configured your Apache installation. If you haven’t, refer to our Apache guides or LAMP stack guides.

  2. In this guide, you will modify the Apache configuration files, so be sure you have the proper permissions to do so.

  3. Update your system.

The Apache virtual host configuration files are found in different places, depending on the distribution of Linux. For example, on CentOS 7: /etc/httpd/conf.d/vhost.conf; on Ubuntu 16.04: /etc/apache2/sites-available/example.com.conf. For the sake of brevity, configuration file excerpts in this guide will direct you to Apache configuration option.

Remember to reload Apache configuration after making changes:

sudo systemctl restart httpd
sudo systemctl restart apache2

The Redirect Directive

Redirect settings can be located in your main Apache configuration file, but we recommend you keep them in your virtual host files or directory blocks. You can also use Redirect statements in .htaccess files. Here’s an example of how to use Redirect:

File: .htaccess
1
Redirect /username http://team.example.com/~username/

If no argument is given, Redirect sends a temporary (302) status code, and the client is informed that the resource available at /username has temporarily moved to http://team.example.com/~username/.

No matter where they are located, Redirect statements must specify the full file path of the redirected resource, following the domain name. These statements must also include the full URL of the resource’s new location.

You can also provide an argument to return a specific HTTP status:

File: .htaccess
1
2
3
4
5
Redirect /username http://team.example.com/~username/
Redirect permanent /username http://team.example.com/~username/
Redirect temp /username http://team.example.com/~username/
Redirect seeother /username http://team.example.com/~username/
Redirect gone /username
  • permanent tells the client the resource has moved permanently. This returns a 301 HTTP status code.
  • temp is the default behavior, and tells the client the resource has moved temporarily. This returns a 302 HTTP status code.
  • seeother tells the user the requested resource has been replaced by another one. This returns a 303 HTTP status code.
  • gone tells the user that the resource they are looking for has been removed permanently. When using this argument, you don’t need to specify a final URL. This returns a 410 HTTP status code.

You can also use the HTTP status codes as arguments. Here’s an example using the status code options:

File: .htaccess
1
2
3
4
Redirect 301 /username http://team.example.com/~username/
Redirect 302 /username http://team.example.com/~username/
Redirect 303 /username http://team.example.com/~username/
Redirect 410 /username

Permanent and temporary redirects can also be done with RedirectPermanent and RedirectTemp, respectively:

File: .htaccess
1
2
RedirectPermanent /username/bio.html http://team.example.com/~username/bio/
RedirectTemp /username/bio.html http://team.example.com/~username/bio/

Redirects can be made with regex patterns as well, using RedirectMatch:

File: .htaccess
1
RedirectMatch (.*)\.jpg$ http://static.example.com$1.jpg

This matches any request for a file with a .jpg extension and replaces it with a location on a given domain. The parentheses allow you to get a specific part of the request, and insert it into the new location’s URL as a variable (specified by $1, $2, etc.). For example:

  • A request for http://www.example.com/avatar.jpg will be redirected to http://static.example.com/avatar.jpg and
  • A request for http://www.example.com/images/avatar.jpg will be redirected to http://static.example.com/images/avatar.jpg.

Beyond URL Redirection

In addition to redirecting users, Apache also allows you to rewrite URLs with mod_rewrite. While the features are similar, the main difference is that rewriting a URL involves the server returning a different request than the one provided by the client, whereas a redirect simply returns a status code, and the “correct” result is then requested by the client.

On a more practical level, rewriting a request does not change the contents of the browser’s address bar, and can be useful in hiding URLs with sensitive or vulnerable data.

Although redirection allows you to easily change the locations of specific resources, you may find that rewriting better fits your needs in certain situations. For more information, refer to Apache’s mod_rewrite documentation.

More Information

You may wish to consult the following resources for additional information on this topic. While these are provided in the hope that they will be useful, please note that we cannot vouch for the accuracy or timeliness of externally hosted materials.

This page was originally published on


Your Feedback Is Important

Let us know if this guide was helpful to you.


Join the conversation.
Read other comments or post your own below. Comments must be respectful, constructive, and relevant to the topic of the guide. Do not post external links or advertisements. Before posting, consider if your comment would be better addressed by contacting our Support team or asking on our Community Site.
The Disqus commenting system for Linode Docs requires the acceptance of Functional Cookies, which allow us to analyze site usage so we can measure and improve performance. To view and create comments for this article, please update your Cookie Preferences on this website and refresh this web page. Please note: You must have JavaScript enabled in your browser.