Динамический запрос Nginx

У меня есть страница example.com/fruit.php. Страница использует ISSET() для анализа параметров, чтобы решить, что показывать пользователю. Например, example.com/fruit.php?name=apple&color=red. Это достаточно легко сделать, но я бы предпочел, чтобы запросы приходили на страницу следующим образом:

mysite.com/fruit/apple/red

Поскольку я знаю, что будет только два параметра, я могу легко проанализировать URL-адрес для создания своей страницы. Однако, как я могу настроить nginx так, чтобы каждый запрос на example.com/fruit с чем-либо за URL-адресом отправлялся на fruit.php, чтобы сама страница могла анализировать URL-адрес. Вот что я пробовал в своем блоке местоположения:

location ~ /fruit {
return 301 https://www.example.com/fruit.php;
} 

Это не работает для меня, и я потратил около дня, пытаясь понять это. Любая помощь будет оценена по достоинству.


person Triple C    schedule 09.06.2016    source источник


Ответы (1)


Я думаю, вы подходите к этому неправильно.

Если вы пытаетесь создавать и поддерживать маршруты с помощью веб-сервера, вы неизбежно столкнетесь с проблемами в будущем, такими как необходимость циклического запуска службы веб-сервера на рабочем сервере каждый раз при развертывании.

Кроме того, вы жестко связываете конфигурацию веб-сервера с вашим приложением, что не самое лучшее.

Что я рекомендую, так это использовать какой-то пакет маршрутизатора, чтобы помочь поддерживать ваши маршруты для вашего проекта.

Посмотрите ответы на этот вопрос stackoverflow.

Затем вы можете настроить веб-сервер так, чтобы он разрешал файл index.php в вашем проекте, который затем будет использовать маршрутизатор для обработки логики ваших путей в приложении.

Посмотрите, как в конечном итоге будет выглядеть ваша конфигурация nginx: Маршрутизация nginx с использованием index.php в качестве точки входа для ваших запросов.

person vsharper    schedule 09.06.2016
comment
Мне кажется, или это на 1000% проще в node.js по сравнению с nginx? Или чуть проще? - person Triple C; 10.06.2016
comment
Это правда, но даже с NodeJS вам все равно придется использовать пакет веб-сервера http, такой как express, чтобы предоставить вам некоторые расширенные функции маршрутизации. В любом случае, роутер — необходимое зло. - person vsharper; 10.06.2016
comment
Да, но express() проще простого. Спасибо за ваш вклад! - person Triple C; 10.06.2016