Soy nuevo en Nginx y estoy tratando de configurar reglas de reescritura para mis hosts virtuales de Nginx.
/{firstname}-{lastname}.php para ser reescrito a /Individual.php?firstname={firstname}&lastname={lastname}
/{firstname}-{lastname}-Info.php?Id=123 para ser reescrito a /Individual-Info.php?Id={id}
Ese es el escenario del caso feliz. A veces, también puede haber un segundo nombre, por ejemplo
{firstname}-{middle}-{lastname}.php se reescribirá a Individual.php?firstname={firstname}&middle={middle}&lastname={lastname}
/{firstname}-{middle}-{lastname}-Info.php?Id=123&otherparam={otherparam} para ser reescrito a /Individual-Info.php?Id={id}&otherparam={otherparam}
Y a veces, puede que solo sea el apellido
{lasname}.php para reescribir a Individual.php?lastname={lastname}
He leído los documentos en el módulo de reescritura, pero supongo que solo estoy luchando con la expresión regular correcta, por lo que esta podría ser más una pregunta de expresión regular, pero cualquier ayuda sería apreciada.
Debe ordenar las reescrituras para que la coincidencia más específica ocurra antes que la coincidencia menos específica. Haz -Info primero, luego tres nombres, luego dos nombres, luego un nombre.
Las reescrituras son ambiguas y existe el riesgo de un ciclo de redirección, particularmente para Mr Individual . Probablemente debería colocar las declaraciones de rewrite dentro de su ubicación existente location ~ \.php$ y usar el sufijo de break . Vea este documento para más detalles.
Por ejemplo:
location ~ \.php$ { rewrite -Info\.php$ /Individual-Info.php break; rewrite ^/(.*)-(.*)-(.*)\.php$ /Individual.php?firstname=$1&middle=$2&lastname=$3 break; rewrite ^/(.*)-(.*)\.php$ /Individual.php?firstname=$1&lastname=$2 break; rewrite ^/(.*)\.php$ /Individual.php?lastname=$1 break; ... } En respuesta a su comentario, puede reescribir solo los URI .php que aún no existen utilizando try_files con una location con nombre.
Por ejemplo:
location ~ \.php$ { try_files $uri @rewrite; ... } location @rewrite { rewrite -Info\.php$ /Individual-Info.php last; rewrite ^/(.*)-(.*)-(.*)\.php$ /Individual.php?firstname=$1&middle=$2&lastname=$3 last; rewrite ^/(.*)-(.*)\.php$ /Individual.php?firstname=$1&lastname=$2 last; rewrite ^/(.*)\.php$ /Individual.php?lastname=$1 last; return 404; } Tenga en cuenta que deberá usar rewrite...last en lugar de rewrite...break . La declaración try_files se agrega (o modifica) dentro de su ubicación existente location ~ \.php$ .