como faço para redirecionar um local para outro, mas sem alterar sua URL no Nginx

como faço para redirecionar um local para outro, mas sem alterar sua URL no Nginx

Estou trabalhando em um site para exibir produtos diferentes. Os usuários podem acessar diferentes páginas de produtos por URLs como 'meudominio.com/produto/1.html', 'meudominio.com/produto/2.html'

mas não quero apresentar esses arquivos HTML estáticos diretamente; em vez disso, há um script php que será carregado primeiro em mydomain.com/product.php

então quero redirecionar 'meudominio.com/produto/1.html' para 'meudominio.com/produto.php', mas não altero seu URL original

Tentei alias, try_files, return, mas todos reescreveram o URL para 'meudominio.com/produto.php'

Sou novo no Nginx, esta é provavelmente uma pergunta muito simples, mas tentei fazer isso por alguns dias.

Responder1

Existem tantas maneiras de fazer isso...

O mais simples é

rewrite ^/product/ /product.php;

noservidorcontexto. Seu URI de solicitação original (ou seja, /product/1.html) estará disponível para product.phpscript como $_SERVER['REQUEST_URI']valor de item da matriz.

Você também pode usar rewritea diretiva nolocalizaçãocontexto, isso pode ser um pouco (muitoligeiramente) mais desempenho:

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

Se desejar, você pode obter o código do produto e passá-lo para o seu product.phpscript como argumento de consulta:

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

ou

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

Desta forma, o código do seu produto ( 1para o /product/1.htmlURI, 2para o /product/2.htmlURI, etc.) estará disponível para product.phpscript como $_GET['product']valor do item da matriz.

Você pode até definir um manipulador FastCGI individual para isso:

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

(o URI da solicitação original estará disponível via $_SERVER['REQUEST_URI']), ou se você quiser que o código do produto esteja disponível via $_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>;
}

informação relacionada