
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.php
script como $_SERVER['REQUEST_URI']
valor de item da matriz.
Você também pode usar rewrite
a 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.php
script 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 ( 1
para o /product/1.html
URI, 2
para o /product/2.html
URI, etc.) estará disponível para product.php
script 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>;
}