Saltar al contenido principal.

Ejemplos de reglas de reescritura de Nginx



Contenido del artículo:

Redirigir a url con barra

Algunos CMS para sitios pueden abrir páginas con una barra inclinada al final y, sin ella, si el motor no se redirige. Por ejemplo, la página http://example.net/page y http://example.net/page/ desde el punto de vista del visitante será una. Pero para los motores de búsqueda, estas son dos páginas diferentes, y slash es el culpable de todo. Así que el contenido duplicado es malo.

Para redirigir a la página de barra diagonal, agregue la siguiente línea al archivo de configuración nginx para su sitio:


  reescribir ^ ([^.] * [^ /]) $ $ 1 / permanent; 

Ahora la página sin una barra inclinada se redirigirá al 301 redireccionamiento a la página con la barra diagonal. Para las páginas con extensiones (.html, .php, etc.), esta regla no afectará. Además, es universal y, para que el motor no procese las redirecciones utilizando php, esta regla debe prescribirse para la mayoría de los sitios donde se utilizan direcciones legibles.

Reescribir para WordPress

La documentación de WordPress tiene un buen ejemplo de reglas de reescritura. Solo resaltaré lo más básico que se requiere para trabajar en conjunto con php-fpm .

  ubicación / {
   try_files $ uri $ uri / /index.php$args;
  }
  ubicación ~ \ .php $ {
   try_files $ uri = 404;
   fastcgi_pass unix: /run/php-www.sock;
   fastcgi_index index.php;
   incluye fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $ document_root $ 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 /";
  } 

Reescribir para MODx

Para los sitios en este CMS, uso las siguientes reglas:


  ubicación / {
 try_files $ uri $ uri / @rewrite;
 }
 ubicación @rewrite {
 reescribir ^ / (. *) $ /index.php?q=$1;
 }
 ubicación ~ \ .php $ {
  try_files $ uri = 404;
  fastcgi_pass unix: /run/php-www.sock;
  fastcgi_index index.php;
  incluye fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $ document_root $ 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 /";
 } 

Redireccionamiento 301 de index.php, index.html en cualquier carpeta

También sucede que el propio CMS no redirige de los archivos de índice a la url sin ellos. Por ejemplo, el sitio está disponible en http://example.com/ y http://example.com/index.php. Esta regla corrige el error.

  if ($ request_uri ~ * index. (php | html)) {
   reescribir ^ (. +) index.php $ esquema: // $ host $ 1 permanente;
 } 

En este caso, no importa si el archivo de índice está en la carpeta raíz o en la subcarpeta, la redirección siempre funcionará.

Otros

Tengo uno de sus blog decidido a cambiar la estructura de los enlaces. Anteriormente, se podía acceder a todas las publicaciones a través de enlaces, como / postname.html, ahora se han trasladado a otra dirección: / fotojournal / postname /. Inicialmente, como solución, pensé en usar el complemento de redirección para wordpress, pero luego quise intentar implementarlo en nginx. Y la idea resultó. :)



Es cierto que la regla resultó ser simple, debido al hecho de que todas las páginas /%postname%.html se transfirieron a una categoría: publicación de noticias. Esta regla se ve así:

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

 ubicación @fotojournal {
   reescribir ^ / (. *) \. html $ / fotojournal / $ 1 / permanent;
 }

Lo consideramos en detalle. Cuando una solicitud proviene de un usuario, primero se busca cualquier archivo con la extensión .html en la carpeta con el sitio. Esto es necesario para las páginas html de la vida real en el sitio, que no deben transferirse a una nueva categoría.

Si no se encontró la página solicitada, la solicitud se redirige a la segunda ubicación: @fotojournal. Aquí se le redirige (redirecciona 301) a una nueva dirección. Por ejemplo, page /page.html se abre en / fotojournal / page /.



¿Cómo calificas el artículo?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 ( 10 calificaciones, promedio: 2.70 de 5)
Cargando ...

Añadir un comentario

Su correo electrónico no será publicado.