Passer au contenu principal

Exemples de règles de réécriture Nginx



Contenu de l'article:

Rediriger vers une URL avec une barre oblique

Certains CMS de sites peuvent ouvrir des pages avec une barre oblique à la fin, ou sans, si le moteur ne se redirige pas. Par exemple, la page http://example.net/page et http://example.net/page/ du point de vue du visiteur en sera une. Mais pour les moteurs de recherche, ce sont deux pages différentes, et la barre oblique est à blâmer pour tout. Donc, le contenu en double est mauvais.

Pour rediriger vers la page de barre oblique, ajoutez la ligne suivante au fichier de configuration nginx de votre site:


  réécrire ^ ([^.] * [^ /]) $ $ 1 / permanent; 

Maintenant, la page sans barre oblique sera redirigée vers la 301e redirection vers la page avec la barre oblique. Pour les pages avec des extensions (.html, .php, etc.), cette règle n’affectera pas. En outre, elle est universelle et, afin que le moteur ne traite pas les redirections à l'aide de php, cette règle doit être prescrite pour la plupart des sites où des adresses lisibles par l'homme sont utilisées.

Réécrire pour WordPress

La documentation WordPress contient un bel exemple de règles de réécriture. Je vais juste souligner la chose la plus élémentaire qui est nécessaire pour travailler en conjonction avec php-fpm .

  emplacement / {
   try_files $ uri $ uri / /index.php$args;
  }
  emplacement ~ \ .php $ {
   try_files $ uri = 404;
   fastcgi_pass unix: /run/php-www.sock;
   fastcgi_index index.php;
   inclure fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $ racine_documentaire $ fastcgi_script_name;
   fastcgi_param PHP_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com";
   fastcgi_param PHP_ADMIN_VALUE "open_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /";
  } 

Réécrire pour MODx

Pour les sites sur ce CMS, j'utilise les règles suivantes:


  emplacement / {
 try_files $ uri $ uri / @rewrite;
 }
 localisation @rewrite {
 réécrire ^ / (. *) $ / index.php?q=$;
 }
 emplacement ~ \ .php $ {
  try_files $ uri = 404;
  fastcgi_pass unix: /run/php-www.sock;
  fastcgi_index index.php;
  inclure fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $ racine_documentaire $ fastcgi_script_name;
  fastcgi_param PHP_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com";
  fastcgi_param PHP_ADMIN_VALUE "open_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /";
 } 

301e redirection depuis index.php, index.html dans n’importe quel dossier

Il arrive également que le CMS lui-même ne redirige pas les fichiers d'index vers l'URL sans eux. Par exemple, le site devient disponible à la fois sur http://example.com/ et http://example.com/index.php. Cette règle corrige l'erreur.

  if ($ request_uri ~ * index. (php | html)) {
   réécrire ^ (. +) index.php $ schéma: // $ hôte $ 1 permanent;
 } 

Dans ce cas, peu importe que le fichier d'index se trouve dans le dossier racine ou dans le sous-dossier, la redirection fonctionnera toujours.

Autre

J'ai un de son blog a décidé de changer la structure des liens. Auparavant, tous les messages étaient accessibles via des liens tels que / postname.html. Ils ont maintenant été déplacés vers une autre adresse: / fotojournal / postname /. Initialement, en tant que solution, je pensais utiliser le plug-in de redirection pour wordpress, mais je voulais ensuite essayer de l'implémenter sur nginx. Et l'idée s'est avérée. :)



Certes, la règle s’est révélée simple en raison du fait que toutes les pages /%postname%.html ont été transférées dans une catégorie - fotojournal. Cette règle ressemble à ceci:

  emplacement ~ * \. (html) $ {
   try_files $ uri $ uri / @fotojournal;
 }

 location @fotojournal {
   réécrire ^ / (. *) \. html $ / fotojournal / $ 1 / permanent;
 }

Nous considérons en détail. Lorsqu'une demande provient d'un utilisateur, tout fichier portant l'extension .html est d'abord recherché dans le dossier contenant le site. Cela est nécessaire pour les pages HTML réelles du site, qui ne doivent pas être transférées dans une nouvelle catégorie.

Si la page demandée n'a pas été trouvée, la demande est redirigée vers le deuxième emplacement - @fotojournal. Ici, vous êtes redirigé (redirection 301) vers une nouvelle adresse. Par exemple, page / page.html s'ouvre à / fotojournal / page /.



Comment évaluez-vous l'article?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 ( 10 évaluations moyenne de 2.70 sur 5)
Chargement ...

Ajouter un commentaire

Votre email ne sera pas publié.