es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilice “rewrite” y “try_files” juntos [Nginx]

Eliminé el sufijo “.php” al final de los archivos PHP en el servidor Nginx con el siguiente código, pero esta vez no puedo enviar algunos datos al servidor.

try_files $uri/ $uri.html $uri.php$is_args$query_string;

Algunos enlaces en el sitio se envían con Ajax y la extensión “.php” no está disponible al final de estos enlaces. Por ejemplo, https://panel.example.com/app/controller/ajax/collect.

Por ejemplo, cuando quiero acceder al archivo “/collect” que quiero acceder a través de Ajax o directamente, obtengo el error “Archivo no encontrado”. Esto se debe a que hago un “rewrite” con el siguiente código y proporciono una URL limpia.

rewrite ^/([^/]+)/([^/]+)?$ /index.php?cmd=$1&scd=$2 last;
rewrite ^/([^/]+)/?$ /index.php?cmd=$1 last;

Enlace de muestra: https://panel.example.com/[detalles|cat|profile]/[subPáginas(productoID, username..)]

Como resultado, los códigos anteriores son correctos y funcionan, pero no funcionan al mismo tiempo juntos. ¿Cómo puedo ejecutar estos dos códigos al mismo tiempo?

Archivo de configuración de Nginx: Nginx Conf. File

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para ejecutar ambos códigos al mismo tiempo

    Para eliminar el sufijo “.php” al final de los archivos PHP y al mismo tiempo permitir el acceso a enlaces sin la extensión “.php”, es necesario modificar la directiva “try_files” y agregar un nuevo bloque “location”.

    Primero, modifique la directiva “try_files” para incluir la extensión “.php” en la lista de archivos a verificar.

    try_files $uri/ $uri.html $uri.php$is_args$query_string;
    

    se convertirá en:

    try_files $uri/ $uri.html $uri$is_args$args $uri.php$is_args$query_string;
    

    A continuación, agregue un nuevo bloque de ubicación para manejar las solicitudes sin la extensión “.php”. Este bloque debe incluir la regla de “rewrite” para redirigir la solicitud al archivo PHP correcto.

    location / {
      rewrite ^/(.*)$ /$1.php last;
    }
    

    El archivo de configuración final de Nginx se verá así:

    server {
      # configuración del servidor 
      # ...
    
      # eliminar sufijo .php
      try_files $uri/ $uri.html $uri$is_args$args $uri.php$is_args$query_string;
    
      # manejar solicitudes sin la extensión .php
      location / {
        rewrite ^/(.*)$ /$1.php last;
      }
    
      # reescribir URL limpia 
      rewrite ^/([^/]+)/([^/]+)?$ /index.php?cmd=$1&scd=$2 last;
      rewrite ^/([^/]+)/?$ /index.php?cmd=$1 last;
    
      # ...
    }
    

    Con esta configuración, las solicitudes con y sin la extensión “.php” se manejarán correctamente y las URL limpias se reescribirán a sus contrapartes de archivos PHP.

Comments are closed.