У меня есть сайт 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
.
Если я правильно понял ваш вопрос, вы хотите удалить первую часть компонента пути 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;
в виртуальный секция хоста для обработки запросов.