У меня есть сайт PHP, обслуживаемый Nginx. Я хочу иметь к нему доступ через разные подпапки. По сути, пользователь может зарегистрироваться, и когда они это сделают, они выбирают установить «URL-адрес». Исходя из этого, они будут заходить на сайт следующим образом:
example.com/{url}
Я бы также согласился с чем-то вроде:
example.com/s/{url}
если это поможет в его обнаружении.
Я хочу, чтобы Nginx получил этот URL-адрес и передал его PHP с помощью fastcgi_param. Кроме того, я хочу, чтобы PHP вел себя так, как будто доступ к сайту осуществляется через example.com
. Так, например, example.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;
в разделе виртуального хоста для обработки запросов.