Рейтинг:0

как перенаправить местоположение на другое, но не меняя его URL-адрес в Nginx

флаг co

Я работаю над веб-сайтом для отображения различных продуктов, пользователи могут получать доступ к разным страницам продуктов по URL-адресам, таким как «mydomain.com/product/1.html», «mydomain.com/product/2.html»

но я не хочу представлять эти статические html-файлы напрямую, вместо этого сначала будет загружен php-скрипт на mydomain.com/product.php

поэтому я хочу перенаправить «mydomain.com/product/1.html» на «mydomain.com/product.php», но не менять исходный URL-адрес

Я пробовал alias, try_files, return, но все они переписывают URL-адрес на «mydomain.com/product.php».

Я новичок в Nginx, это, наверное, очень простой вопрос, но я пытался решить его пару дней.

Рейтинг:0
флаг gr

Есть так много способов сделать это...

Самое простое это

переписать ^/product/ /product.php;

в сервер контекст. URI исходного запроса (т.е. /продукт/1.html) будет доступен для продукт.php сценарий как $_SERVER['REQUEST_URI'] значение элемента массива.

Вы также можете использовать переписать директива на место расположения контексте, это может быть немного (очень немного) более производительный:

местоположение /продукт/ {
    переписать ^/product.php последним;
}

При желании вы можете получить код продукта и передать его своему продукт.php script в качестве аргумента запроса:

переписать ^/product/(.*)\.html$ /product.php?product=$1;

или же

местоположение /продукт/ {
    переписать ^/product/(.*)\.html$ /product.php?product=$1 последним;
}

Таким образом, ваш код продукта (1 для /продукт/1.html УРИ, 2 для /продукт/2.html URI и т. д.) будут доступны для продукт.php сценарий как $_GET['продукт'] значение элемента массива.

Вы даже можете определить для этого отдельный обработчик FastCGI:

местоположение /продукт/ {
    включить fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/product.php;
    fastcgi_pass <fastcgi_upstream_or_socket>;
}

(исходный URI запроса будет доступен через $_SERVER['REQUEST_URI']), или если вы хотите, чтобы код продукта был доступен через $_GET['продукт']:

местоположение ~ /product/(.*)\.html$ {
    включить fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root/product.php;
    fastcgi_param QUERY_STRING product=$1;
    fastcgi_pass <fastcgi_upstream_or_socket>;
}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.