En utilisant Nginx, vous pouvez avoir besoin de mettre en place des redirections.
Ce tutoriel va vous guider sur la mise en place de ces redirections en configurant vos vhosts.

Redirection une à une sur Nginx

La redirection une à une est la plus simple à mettre en place en éditant votre vhost Nginx :

vim /etc/nginx/sites-available/nom_de_vhost.conf

server {
  listen 80;
  server_name www.domain.com;
  rewrite  ^/old_link.html$  http://www.domain.com/new_link.html permanent;
}

Ce paramètre indique que la redirection est permanente (301). En retirant ce paramètre, la redirection est indiquée comme temporaire (302).


Redirection multiple Nginx

Comme une redirection pas à pas, on peut effectuer des redirections multiples en employant les expressions régulières :

vim /etc/nginx/sites-available/nom_de_vhost.conf

server {
  listen 80;
  server_name www.domain.com;
  rewrite ^/old_folder/page-id-.*.html$ http:///old_folder/page-id- permanent;
}

Erreur 404 Nginx

En cas de requête de page inexistante sur votre serveur, vous pouvez définir une page d’erreur 404 par défaut.

vim /etc/nginx/sites-available/nom_de_vhost.conf

server {
  listen 80;
  server_name www.domain.com;
  error_page 404 /404.php;
}

Redirection avec un paramètre Nginx

Pour effectuer une redirection d’une URL avec paramètre old-page.php?parameter=100 vers une URL sans new_page.html, on va rechercher le paramètre à partir d’une condition et ne pas le transmettre à la redirection :

vim /etc/nginx/sites-available/nom_de_vhost.conf

location ~ /old_page.php {
  if ($args ~ parameter=100){
    rewrite ^ http://www.domain.com/new_page.html? permanent;
  }
}

Le point d’interrogation final indique à Nginx la fin de la nouvelle URL sans paramètre.


Redirection avec condition Nginx

De la même manière, il est possible d’effectuer une redirection selon une condition :

vim /etc/nginx/sites-available/nom_de_vhost.conf

# Redirection avec condition sans paramètre
location ~ /old_page.php {
  if ($arg_page != ""){
    rewrite ^ http://www.domain.com/new_page.html? permanent;
  }
}

# Redirection avec condition avec paramètre
location ~ /old_page.php {
  if ($arg_page != ""){
    rewrite ^ http://www.domain.com/new_page/$arg_page? permanent;
  }
}

Sous-domaine Nginx

Il est également possible d’effectuer une redirection de vos pages domain.com vers un sous-domaine (exmple: www, blog, …) :

vim /etc/nginx/sites-available/nom_de_vhost.conf

# Redirection vers le sous domaine blog.domain.com
server {
  listen 80;
  server_name domain.com;
  rewrite ^/(.*) http://blog.domain.com/$1 permanent;
}