¿Cómo redirijo una ubicación a otra pero sin cambiar su URL en Nginx?

¿Cómo redirijo una ubicación a otra pero sin cambiar su URL en Nginx?

Estoy trabajando en un sitio web para mostrar diferentes productos, los usuarios pueden acceder a diferentes páginas de productos mediante URL como 'mydomain.com/product/1.html', 'mydomain.com/product/2.html'

pero no quiero presentar esos archivos html estáticos directamente, sino que primero se cargará un script php en mydomain.com/product.php

entonces quiero redirigir 'midominio.com/product/1.html' a 'midominio.com/product.php' pero no cambie su URL original

Probé alias, try_files, return, pero todos reescribieron la URL a 'midominio.com/product.php'

Soy nuevo en Nginx, esta es probablemente una pregunta muy simple, pero he intentado lograrlo durante un par de días.

Respuesta1

Hay tantas maneras de hacerlo...

El más simple es

rewrite ^/product/ /product.php;

en elservidorcontexto. Su URI de solicitud original (es decir /product/1.html, ) estará disponible para product.phpel script como $_SERVER['REQUEST_URI']valor de elemento de matriz.

También puede utilizar rewritela directiva en elubicacióncontexto, esto puede ser ligeramente (muyligeramente) más eficaz:

location /product/ {
    rewrite ^ /product.php last;
}

Si lo desea, puede obtener el código del producto y pasarlo a su product.phpscript como argumento de consulta:

rewrite ^/product/(.*)\.html$ /product.php?product=$1;

o

location /product/ {
    rewrite ^/product/(.*)\.html$ /product.php?product=$1 last;
}

De esta manera, su código de producto ( 1para el /product/1.htmlURI, 2para el /product/2.htmlURI, etc.) estará disponible para product.phpel script como $_GET['product']valor del elemento de la matriz.

Incluso puedes definir un controlador FastCGI individual para esto:

location /product/ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/product.php;
    fastcgi_pass <fastcgi_upstream_or_socket>;
}

(El URI de solicitud original estará disponible a través de $_SERVER['REQUEST_URI']), o si desea que el código del producto esté disponible a través de $_GET['product']:

location ~ /product/(.*)\.html$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/product.php;
    fastcgi_param QUERY_STRING product=$1;
    fastcgi_pass <fastcgi_upstream_or_socket>;
}

información relacionada