Динамическая подпапка Nginx как fastcgi_param

У меня есть сайт PHP, обслуживаемый Nginx. Я хочу иметь к нему доступ через разные подпапки. По сути, пользователь может зарегистрироваться, и когда они это сделают, они выбирают «URL-адрес». Исходя из этого, они будут обращаться к сайту следующим образом:

example.com/{url}

Я бы тоже согласился с чем-то вроде:

example.com/s/{url}

, если бы это помогло его обнаружить.

Я хочу, чтобы Nginx захватил этот URL и передал его PHP с использованием fastcgi_param. Кроме того, я хочу, чтобы PHP вел себя так, как если бы доступ к сайту осуществлялся только через example.com . Так, например, пример . com / s / {url} / about будет таким же, как example.com/about .

1
задан 23 March 2017 в 17:49
1 ответ

Если я правильно понял ваш вопрос, вы хотите удалить первую часть компонента пути URL сайта из URL, переданного в PHP. Вот как это можно сделать:

location ~ ^(?<userurl>[^/]+)(<dest>/.+)$ {
    rewrite ^ $dest break;
}

Итак, это изменит URL-адреса следующим образом:

http://example.com/about/something становится http://example.com/something .

http://example.com/about становится http://example.com/

Регулярное выражение также захватывает часть после первого / для переменная $ userurl , которую вы можете использовать в своем fastcgi_param для передачи части URL-адреса в сценарий PHP.

Однако вместо разделения работы между nginx и вашим PHP-скрипт, я рекомендую реализовать шаблон фронт-контроллера в вашем PHP-скрипте. Это означает, что он проанализирует $ _ SERVER ['REQUEST_URI'] и обработает запрос в соответствии с правилами, которые вы реализуете в PHP.

Затем в nginx вы просто добавите:

try_files $uri $uri/ /index.php;

в виртуальный секция хоста для обработки запросов.

1
ответ дан 3 December 2019 в 23:32

Теги

Похожие вопросы